[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: Clob to Blob

  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.120

    Clob to Blob

    Hallo,

    vielleicht hat jemand auf die Schnelle eine gute Idee: Wir haben eine Tabelle, in der sich ein Clob-Feld befindet. Das möchten wir zur Weiterverarbeitung in eine andere Tabelle übertragen. In der Zieltabelle ist der Feldtyp allerdings Blob.

    Wenn wir das mit SQL machen (...insert into ... select blob(clobfeld) ...) kommt das zwar in der Zieltabelle an, aber der Text ist nicht mehr erkennbar. Es steht scheinbar nur noch Murks in dem Feld.

    Ich nehme an, dass das irgendetwas mit der CCSID zu tun hat. Mangels einer besseren Lösung werden wir jetzt versuchen, das Clob als Textdatei im IFS zu speichern und dann das IFS-File in die Blob-Tabelle zu schieben.

    Vielleicht kennt ja jemand einen besseren Weg.

    Dieter

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hast Du es schon mal ohne explizite Konvertierung versucht?
    Wahrscheinlich bringt es nichts, aber ausschließen kann man es nicht.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Woher willst du wissen, dass in dem BLOB murks drinsteht?
    Dem ist nämlich nicht so.
    Dein Problem beim Auslesen des BLOB's ist die fehlenden Codewandlung.
    Die Daten sind nämlich durch das CLOB in EBCDIC (ggf. 273 Deutsch) kodiert.
    Gibst du die Daten nun z.B. ins IFS aus mit einer CCSID 1252 o.ä., erfolgt nun keine Codewandlung des BLOB's. Das selbe gilt auch für ODBC/JDBC-Zugriffe (z.B. der 5250-Filetransfer verwendet auch SQL).

    Mit Nativemethoden der AS/400 (CPYTOIMPF o.ä.) kannst du leider keine Konvertierung für BLOB erzwingen.

    Wenn allerdings dein Ziel sowieso ANSI oder UTF8 ist, kannst du beim Insert in den BLOB dein CLOB in eine ANSI/UTF-CCSID casten:
    blob(clob(myclob, newsize, 1208))
    für UTF8 sollte funktionieren. Wenn du was anderes haben willst, musst du halt diverses ausprobieren.
    Leider kann man ANSI nicht native als SBCS in der Datenbank speicher und ein CLOB ist eben nicht DBCS.
    Alternativ geht ggf BLOB(NCLOB(CLOB)), dann sind die Daten in UTF-16 gespeichert. Die weiterverarbeitung gestaltet sich bei Binärdaten halt immer als schwierig.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Hast Du es schon mal ohne explizite Konvertierung versucht?
    Wahrscheinlich bringt es nichts, aber ausschließen kann man es nicht.

    Birgitta
    Ohne Konvertierung geht es gar nicht.

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Woher willst du wissen, dass in dem BLOB murks drinsteht?
    Dem ist nämlich nicht so.
    Dein Problem beim Auslesen des BLOB's ist die fehlenden Codewandlung.
    Die Daten sind nämlich durch das CLOB in EBCDIC (ggf. 273 Deutsch) kodiert.
    Gibst du die Daten nun z.B. ins IFS aus mit einer CCSID 1252 o.ä., erfolgt nun keine Codewandlung des BLOB's. Das selbe gilt auch für ODBC/JDBC-Zugriffe (z.B. der 5250-Filetransfer verwendet auch SQL).

    Mit Nativemethoden der AS/400 (CPYTOIMPF o.ä.) kannst du leider keine Konvertierung für BLOB erzwingen.

    Wenn allerdings dein Ziel sowieso ANSI oder UTF8 ist, kannst du beim Insert in den BLOB dein CLOB in eine ANSI/UTF-CCSID casten:
    blob(clob(myclob, newsize, 1208))
    für UTF8 sollte funktionieren. Wenn du was anderes haben willst, musst du halt diverses ausprobieren.
    Leider kann man ANSI nicht native als SBCS in der Datenbank speicher und ein CLOB ist eben nicht DBCS.
    Alternativ geht ggf BLOB(NCLOB(CLOB)), dann sind die Daten in UTF-16 gespeichert. Die weiterverarbeitung gestaltet sich bei Binärdaten halt immer als schwierig.
    Danke für die ausführliche Antwort. Wir werden das mal mit der 1208er-Umwandlung ausprobieren. Auf die Idee "clob(clob)" auszuführen, bin ich noch nicht gekommen!
    Vielen Dank.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wie werden denn die Daten aus dem BLOB anschließend tatsächlich verarbeitet?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ein PC-Programm (Java und VBA) holt sich das Blob (darin befindet sich HTML-Text) und fügt den Text in ein Word-Dokument ein.

    Mit unserer interaktiven SQL-Oberfläche (wir nutzen dbVisualizer) haben ich deinen Vorschlag mal ausprobiert: select blob(clob(et_htmltxt, 1000, 1208)) from bvsveitx;
    Wenn ich das so auslese, kann der dbVisualizer den Text anzeigen. Es scheint also zu funktionieren. Es sieht auch so aus, als würde die Längenangabe (hier 1000) nicht exakt benötgt. Solange der Wert ausreichend groß ist, scheint es zu klappen. Nach der Umwandlung auf UTF-8 scheint die korrekte Länge (in unserem Beispiel weniger als 1000) verwendet zu werden.

    Wir müssen das aber erst noch in die Programme einbauen, um es genau zu verifizieren. Wenn das klappt, war das eine super Idee von dir. Nochmals danke.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Warum könnt ihr dann die "Arbeitstabelle" nicht einfach als CLOB umstellen?
    Bzw. warum überhaupt LOB?
    Können denn Daten von mehr als 16KB vorkommen?
    Da würde ggf. ein NVARCHAR(16000) ausreichen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Die Arbeitstabelle ist "allgemeingültig". Da stehen auch andere Dinge drin, die weiterverarbeitet werden (z.B. PDFs, Grafiken, Word-Dokumente usw.). Jetzt muss neuerdings auch ein HTML-Text, der als CLOB vorliegt, da rein. Der HTML-Text kann wesentlich größer als 16KB sein. Der Text wird vom TinyMCE Editor erzeugt und kann ca. 1 MB groß sein.

  10. #10
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ach, übrigens: Du hattest ja oben weiter den Vorschlag BLOB(NCLOB(CLOB)) ins Spiel gebracht. Die Funktion NCLOB habe ich noch nie gehört. Es scheint sie auf der iSeries auch nicht zu geben. Aber mein dbVisualizer scheint "nclob" als Schlüsselwort zu kennen.



  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ab V7 gibt es die N(ational) Felder:
    NCHAR, NVARCHAR, NCLOB, ...

    Und für HTML bietet sich ja UTF-8 an, die Zielanwendung muss das allerdingsg auch wissen, damit die Daten nicht als ANSI interpretiert werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Danke. Im SQL-Handbuch tauchen die Begriffe nicht unter den skalaren Funktionen auf. Aber man findet sie im Bereich der CAST Anweisung. Mir ist trotzdem noch nicht ganz klar, was man damit macht. Ändert man damit einen (beliebigen) Text in die nationale Zeichensatzcodierung?

Similar Threads

  1. Inhalt CLOB Feld in IFS-Datei
    By alex61 in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 06-07-16, 11:51
  2. Textteil ersetzen in CLOB - Feld
    By alex61 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-06-16, 13:26
  3. SQL-Anweisung UPDATE auf CLOB-Spalte mit einer Zeichenfolge >32K
    By Joshua in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 24-11-15, 10:53
  4. Blob-Handling
    By infomio in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 28-03-03, 16:46
  5. Blob-Felder anlegen
    By infomio in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 25-03-03, 11:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •