5 Replies Latest reply on Nov 13, 2019 12:57 PM by steph0h

    ORA-01406 bei Umlauten

    steph0h

      Im Rahmen der Migration von Forms 11g nach 12c sind wir hier auf ein interessantes Problem gestoßen: und zwar tritt unter bestimmten Bedingungen ein ORA-01406 (Spaltenwert abgeschnitten) auf.

       

      Die zugrundeliegende Tabelle hat ein Textfeld das beispielsweise so definiert ist:

       

      BEZEICHNUNG VARCHAR2(10 BYTE)

       

      Darin ist zB folgender Wert gespeichert: "Hütte12345" - d.h. der String enthält einen Umlaut und ist voll aufgefüllt.

       

      Gleich vorweg - der Fehler tritt mit folgenden Werten nicht auf:

      "Hutte12345"

      "Hütte1234"

       

      Der Fehler trat in tabellenbasierten Blockattributen auf und konnte dort durch das explizite Setzen der Längensemantik behoben werden.

       

      Allerdings gibt es da noch eine PLL-Funktion, wo der Fehler im Code auftritt - und hier ist die Sache nicht so einfach zu beheben:

       

      FUNCTION get_fabr_row(iFabrNr varchar2)

      RETURN is_fabrikate%rowtype

      IS

           db_row is_fab%rowtype;   

      BEGIN

        select * into db_row

        from is_fab

        where nr = iFabrNr;

        RETURN db_row;

      END;

       

      Hier tritt der Fehler unmittelbar beim Selektieren in die Recordvariable db_row auf!

      Der Verdacht liegt natürlich nahe, dass es sich um ein NLS-Problem handelt.

       

      Die Sache wird noch kompliziert dadurch, dass der Fehler am Entwicklungssystem nicht auftritt - allerdings am Testsystem schon. Und bei diesem habe ich leider keinen direkten Zugriff auf die Konfiguration - und habe auch keine Möglichkeit diese selbst zu kontrollieren. Bin da von einem Kollegen abhängig, der leider immer seltener verfügbar ist (ist schon in einem anderen Projekt und kann sich um das eigentlich gar nicht mehr kümmern etc. etc.)

      Jetzt wäre es sehr hilfreich, hier von der Community Hinweise zu bekommen, in welche Richtung ich da schauen sollte. Wodurch kann dieses Verhalten ausgelöst werden?

       

      Danke,

      Stephan

        • 1. Re: ORA-01406 bei Umlauten
          Volker Deringer

          Hallo Stephan,

           

          ich hatte mal ein ähnliches Problem in Zusammenhang mit einem Report.

          Ursache war letztendlich eine Type-Deklaration in einem Package, die im Report in PL/SQL verwendet wurde.

          Der Fehler trat auf, wenn die Datenbanken bzw. die Char-Semantik des Types beim Compilieren und beim Ausführen unterschiedlich waren

          (und zusätzlich die DEV-Datenbank einen UTF8-Zeichsensatz hatte und die Produktion noch einen 8-bit-Zeichensatz).

          Details müsste ich aber erst wieder nachschauen.

           

          Ich würde daher als erstes mal sicherstellen, dass der rowtype auf der DEV-Datenbank und auf TEST identisch ist,

          d.h. vor allem die varchar2-Spalten der Tabelle(?) IS_FAB identisch angelegt sind - BYTE vs. CHAR.

          Im Zweifel abfragen über USER_TAB_COLS und dort CHAR_USED ...

           

          Aber ohne Zugriff auf TEST .. ??

           

          Viel Erfolg!

           

          Volker

          • 2. Re: ORA-01406 bei Umlauten
            steph0h

            Hallo Volker,

             

            Danke für die Antwort.

            Ich muss da etwas präzisieren: die Datenbank ist die gleiche - insoferne ist sichergestellt, dass auch die Tabellendefinition gleich ist :-)

            Und auf die Datenbank habe ich auch Zugriff.

            Worauf ich keinen direkten Zugriff habe ist die Konfiguration des Forms-Servers!

             

            Stephan

            • 3. Re: ORA-01406 bei Umlauten
              Volker Deringer

              Hallo Stephan,

               

              ok, dann prüfe mal die verwendeten NLS-Einstellungen.

               

              Diese kannst du in deinem Forms-Modul abfragen mittels

               

              tool_env.get_var('NLS_LANG', lokale_variable1)

              tool_env.get_var('NLS_LENGTH_SEMANTICS', lokale_variable2)

               

              Gibt es da Unterschiede zwischen DEV und TEST?

               

              Grüße


              Volker

              • 4. Re: ORA-01406 bei Umlauten
                Frank Hoffmann

                Hallo Zusammen,

                 

                der NLS Parameter müsste auch über ein Buildin funktionieren:

                 

                GET_APPLICATION_PROPERTY(USER_NLS_LANG);

                 

                Gruß nach Freiburg und bis nächste Woche Volker...

                 

                Frank

                • 5. Re: ORA-01406 bei Umlauten
                  steph0h

                  Ok, das hat mir schon mal weitergeholfen:

                   

                  Am Entwicklungssystem läuft es mit GERMAN_GERMANY.WE8MSWIN1252

                  Wohingegen am Testsystem GERMAN_GERMANY.UTF8 zurückkommt

                   

                  Werde mal am Entwicklungssysetm UTF8 einsetzen und dann schauen, wie sich die Maske verhält ...