Announcement

Collapse
No announcement yet.

LOB-Felder

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LOB-Felder

    Hallo,

    ich möchte noch einmal eine Frage zu CLOB-Feldern stellen.
    Ich möchte grössere Datenmengen migrieren und habe mir deshalb eine Tabelle mit einem entsprechenden CLOB-Feld und den entsprechenden Locator mit EMPTY_CLOB() angelegt und das entsprechende Feld initialisiert. Bis zu einer Datenmenge von knapp 3900 Zeichen klappt alles reibungslos, sobald ich aber grössere Mengen einbringe, läuft die Anwendung auf einen Fehler und ich bin mir nicht sicher wo ich noch Ursachen suchen kann. In welcher Doku könnte ich zur Not nachlesen. Für konstruktive Hinweise wäre ich sehr dankbar.

  • #2
    CLOB funktionieren unter Oracle nur bei "günstigen" Verhältnissen von Server und Client-Version sowie passender Verwendeter Codierung auf Client und Server-Seite. UTF8 ist hier auf beiden Seiten von Vorteil.

    Comment


    • #3
      Bernhard, danke für Deine Antwort, darf ich Dich dennoch bitten mir zu sagen, was Du mit "günstigen" Verhältnissen meinst? Ich bin Entwickler und auf dem Gebiet der DBA-Seite nicht so bewandert.

      Nochmals danke, diesmal im voraus

      Comment


      • #4
        Server sollte mit UTF8-Codierung eingerichtet sein und Client auch damit arbeiten. Auf Clientseite ist damit die Umgebungsvariable NLS_LANG gemeint, auf Serverseite muß dies bei der Installation erfolgen. Und auch manche Versionen von Client/Server-SW sind fehlerhaft.

        Comment


        • #5
          Originally posted by Blubaju View Post
          ...Bis zu einer Datenmenge von knapp 3900 Zeichen klappt alles reibungslos, sobald ich aber grössere Mengen einbringe, läuft die Anwendung auf einen Fehler und ich bin mir nicht sicher wo ich noch Ursachen suchen kann. ...
          Hallo Blubaju,

          für Hinweise auf Ursachen wäre natürlich Interessant WELCHER Fehler auftritt. Hast du evtl. eine Oracle-Fehlernr?
          3900 Zeichen könnte auch ein Hinweis auf ein - bei der Migration vergessenes - VARCHAR2 Feld sein, da dort maximal 4000 Zeichen möglich sind. Oder ist in der Anwendung doch noch irgendwo ein Datentyp nicht richtig angepasst?

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,
            ersteinmal vielen Dank für Deine Antwort. Wenn ich das CLOB-Datenfeld mit über 3900 Zeichen füllen will, kommt der Fehler "zuviele Zeichen für diesen Datentyp", was mir völlig schleierhaft ist.

            Gruss

            Comment


            • #7
              Hallo Blubaju,

              das scheint keine Oracle-Fehlermeldung zu sein. Kommt das mglws. aus der Anwendung und ist dort noch ein "Zwischenspeicher" unterdimensioniert. Oder findet noch eine Prüfung statt, die noch nicht "weiß" das sie es jetzt mit einem CLOB zu tun hat und dort wesentlich mehr rein passt?

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                das könnten wirklich Ursachen sein, denen ich ersteinmal nachgehen werde und mich mit einem DBA zusammensetze werde. Ich werde das Ergebnis mitteilen.

                Vielen Dank für Deine Antwort
                Blubaju

                Comment


                • #9
                  Hallo,

                  nachdem ich noch einmal alles überprüft habe, ist immer noch keine Lösung perfekt. Es tritt immer noch folgender Fehler auf:
                  ORA-01704 String Literal too long; ich verstehe einfach nicht warum? und bin ziemlich verzweifelt.Das Tabellenscript sieht folgendermassen aus:

                  CREATE TABLE LOBTEST
                  (
                  ID NUMBER NOT NULL,
                  PROFILE CLOB DEFAULT EMPTY_CLOB(),
                  PHOTO BLOB DEFAULT EMPTY_BLOB()
                  )
                  TABLESPACE KBU_DATA
                  PCTUSED 0
                  PCTFREE 10
                  INITRANS 1
                  MAXTRANS 255
                  STORAGE (
                  INITIAL 64K
                  MINEXTENTS 1
                  MAXEXTENTS 2147483645
                  PCTINCREASE 0
                  BUFFER_POOL DEFAULT
                  )
                  LOGGING
                  NOCOMPRESS
                  LOB (PROFILE) STORE AS
                  ( TABLESPACE KBU_DATA
                  ENABLE STORAGE IN ROW
                  CHUNK 8192
                  PCTVERSION 10
                  NOCACHE
                  STORAGE (
                  INITIAL 64K
                  MINEXTENTS 1
                  MAXEXTENTS 2147483645
                  PCTINCREASE 0
                  BUFFER_POOL DEFAULT
                  )
                  )
                  LOB (PHOTO) STORE AS
                  ( TABLESPACE KBU_DATA
                  ENABLE STORAGE IN ROW
                  CHUNK 8192
                  PCTVERSION 10
                  NOCACHE
                  STORAGE (
                  INITIAL 64K
                  MINEXTENTS 1
                  MAXEXTENTS 2147483645
                  PCTINCREASE 0
                  BUFFER_POOL DEFAULT
                  )
                  )
                  NOCACHE
                  NOPARALLEL
                  NOMONITORING;

                  Hat nicht noch jemand eine IDee?

                  Gruss
                  Blubaju

                  Comment


                  • #10
                    Hallo Blubaju,

                    ORA-01704 wird in der Oracle-Hilfe wie folgt erläutert:
                    ORA-01704: string literal too long
                    Cause: A quoted string specified as a constant was too long.
                    Action: Quoted strings may not contain more than 2000 characters.
                    Hat zu gut deutsch nichts mit deinem CLOB zu tun, sondern mit der Art und Weise wie du die Daten übergibst.
                    Wenn du einen Text mit mehr als 2000 Zeichen in ein CLOB schreiben willst, dann kannst du das nicht mehr direkt in einem Statement tun, sondern mußt Parameter verwenden oder dich des Package SYS.DBMS_LOB und der darin befindlichen Funktionen bedienen.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Danke Falk, ich denke das ist die einzige Möglichkeit.
                      Gruss
                      Blubaju

                      Comment

                      Working...
                      X