[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Dec 2007
    Beiträge
    16

    INSERT mit CAST

    Hallo zusammen,

    ich möchte mit einem INSERT INTO eine Spalte mit einer anderen CCSID einfügen, als die Tabelle vorliegt:

    INSERT INTO tabelle (Feld1) VALUES (CAST 'Polnischer Text' AS CHAR(60) CCSID 870));

    Auf der einen iSeries funktioniert das, auf der anderen aber leider nicht. Dort gibt es dann den Fehler SQL0100. Nehme ich den CAST aus der Anweisung heraus, funktioniert das Einfügen. Auf beiden Maschinen läuft Version5R4.

    Hat jemand einen Tipp woran das liegen könnte?

    Gruß Björn

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich weiß nicht was das soll.
    Entscheidend ist die CCSID des Zielfeldes bzw. der Tabelle.
    Beim Insert wird dann der Wert in die Ziel-CCSID konvertiert !
    Ist die Ziel-CCSID z.B. 273 (Deutsch), wird der Text später beim Lesen auch als Deutsch interpretiert.

    Woher kommt denn dein polnischer Text ?
    Steht dein Job dann auch auf polnisch ?

    Ausserdem ist eine Konvertierung von polnisch nach deutsch und zurück nicht sinnvoll (Datenverlust).
    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

  3. #3
    Registriert seit
    Dec 2007
    Beiträge
    16
    Der Ursprungstext kommt ebenfalls von einer iSeries Datenbank. Die Tabelle liegt in CCSID 273 vor. Einige Texte wurden allerdings in einer polnischen Windows-Umgebung eingegeben. Damit wir die polnischen Umlaute in Osteuropäischem Windows (1250) korrekt darstellen können, wird während des SELECTs in die CCSID 870 gecastet.

    Dieser Text wird über einen INSERT in einer anderen Tabelle (CCSID 273) gespeichert. Der Job, der den Insert durchführt hat ebenfalls eine 273 ID. Kann man die Zeichensatz ID eines SQL Jobs beeinflußen (ohne über den Green-Screen einzugreifen)?

    Wird der Text ohne das Casting eingefügt, gehen die polnischen Umlaute verloren.

    Aber bei meiner Frage geht es gar nicht um das Casting. Es geht viel mehr darum, dass Agregatfunktionen im INSERT nicht ausgeführt werden. Ich habe zum Beispiel auch RTRIM('BlaBla ') oder 'Hallo' CONCAT ' du da' ausprobiert. Inzwischen weiß ich auch, dass dieses Problem sich nicht nur auf die Tabelle bezieht, sondern ein Systemproblem sein muss. Ich habe auf beiden Maschinen jeweils eine neue Tabelle angelegt und meine Versuche mit gleichem Ergebnis durchgeführt. Die Warnung SQL0100 würde mich ja nicht stören, wenn der Datensatz wenigstens eingetragen werden würde.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    SQL0100: Zeile für &1 nicht gefunden.

    Dies kommt nur bei Verwendung eines "Select" bzw. "Insert ... Select" vor !

    Die Ursache ist also nicht dein cast sondern was anderes.

    PS:
    SQL-Fehlertexte kannst du per
    WRKMSGD () QSQLMSG
    betrachten.
    SQL-Fehler beginnen immer mit SQLxxxx wobei xxxx die 4-stellige vorzeichenlose Nr. ist.
    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

  5. #5
    Registriert seit
    Dec 2007
    Beiträge
    16
    Das ist ja gerade das Verwirrende, dass der Fehler irgendwie nichts aussagend ist.

    Und die Frage zielt auf das "andere" hin. Vielleicht hat ja jemand das Phänomen schon mal gehabt und beseitigen können.

    Ich teste die SQL Anweisungen mit dem Client Access Tool "CWBUNDBS", dort wird der Fehler ebenfalls komplett ausgegeben.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich denke hier ist das Problem, dass SQL als ODBC-Zugriff ausgeführt wird.
    Im Gegensatz zum Dialog/Batchjob hat ein SQL-ODBC-Job (QZDASOINIT) immer eine CCSID.

    Normalerweise wird eine Codewandlung von einer CCSID in eine andere, die zu Datenverlust führt vom System abgewiesen.

    Andererseits deutet auch einiges auf Repository-Fehler hin (QSYS2/SYSxxx).
    Hierzu gabs auch schon mal Hinweise:

    RCLSTG SELECT(*DBXREF)
    ENDHOSTSVR SERVER(*DATABASE)
    DLTSQLPKG SQLPKG(QGPL/QZDAPKG)
    STRHOSTSVR SERVER(*DATABASE)

    Die Ursache liegt meist daran, dass das SQLPKG aus vorherigen Releases stammt und nicht neu aufgebaut wurde.
    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
    Mar 2002
    Beiträge
    5.365
    @cast: das geht auch in einer View
    @job CCSID: das lässt sich zuweilen toppen durch einen mehrfachen Cast mit Zwischencast nach 65535 (transparent data)
    @SQL100: dein insert fliegt mir mit Token CAST not valid um die Ohren

    D*B


    Zitat Zitat von BDehmel Beitrag anzeigen
    Der Ursprungstext kommt ebenfalls von einer iSeries Datenbank. Die Tabelle liegt in CCSID 273 vor. Einige Texte wurden allerdings in einer polnischen Windows-Umgebung eingegeben. Damit wir die polnischen Umlaute in Osteuropäischem Windows (1250) korrekt darstellen können, wird während des SELECTs in die CCSID 870 gecastet.

    Dieser Text wird über einen INSERT in einer anderen Tabelle (CCSID 273) gespeichert. Der Job, der den Insert durchführt hat ebenfalls eine 273 ID. Kann man die Zeichensatz ID eines SQL Jobs beeinflußen (ohne über den Green-Screen einzugreifen)?

    Wird der Text ohne das Casting eingefügt, gehen die polnischen Umlaute verloren.

    Aber bei meiner Frage geht es gar nicht um das Casting. Es geht viel mehr darum, dass Agregatfunktionen im INSERT nicht ausgeführt werden. Ich habe zum Beispiel auch RTRIM('BlaBla ') oder 'Hallo' CONCAT ' du da' ausprobiert. Inzwischen weiß ich auch, dass dieses Problem sich nicht nur auf die Tabelle bezieht, sondern ein Systemproblem sein muss. Ich habe auf beiden Maschinen jeweils eine neue Tabelle angelegt und meine Versuche mit gleichem Ergebnis durchgeführt. Die Warnung SQL0100 würde mich ja nicht stören, wenn der Datensatz wenigstens eingetragen werden würde.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Schau mal die Syntax:

    cast(....)

    Bei dir fehlt eine Klammer !

    CAST('Polnischer Text' AS CHAR(60) CCSID 870)
    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
    Dec 2007
    Beiträge
    16
    Okay, sorry das war mein Fehler. In meinen Tests war das Statement aber immer richtig gewesen. Hier habe ich nur ein Beispiel geschrieben. Dabei habe ich die öffnende Klammer vergessen.

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... genau das geht aber und selbst bei kaputtester Datenbank kann das keinen sqlcode 100 liefern, der gehört zum SELECT. Es wäre schon sinnvoll das exakte Statement und die exakte Fehlermeldung zu posten...
    D*B

    Zitat Zitat von BDehmel Beitrag anzeigen
    Okay, sorry das war mein Fehler. In meinen Tests war das Statement aber immer richtig gewesen. Hier habe ich nur ein Beispiel geschrieben. Dabei habe ich die öffnende Klammer vergessen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Dec 2007
    Beiträge
    16
    Leider schaffe ich es nicht, einen Screenshot einzufügen:

    > INSERT INTO plib01.psbspf (psbs01, psbs10) VALUES ('000000000001', CAST('Testeintrag' AS CHAR(60) CCSID 870))
    SQL-Status: 02000
    Vendorencode: 100
    Nachricht: [SQL0100] Zeile für INSERT nicht gefunden. Ursache . . . . : Eine der folgenden Bedingungen ist eingetreten: -- Handelt es sich um eine Anweisung FETCH, entsprechen alle weiteren Zeilen nicht den Auswahlwerten (Ende der Datei). Der Name des Cursors ist INSERT, und die Ergebnislistenkennung ist 0. Ist die Ergebnislistenkennung nicht Null, wurde auf die Ergebnistabelle für diesen Cursor als Ergebnisliste einer gespeicherten Prozedur zugegriffen. -- Handelt es sich um eine Anweisung FETCH für einen verschiebbaren Cursor, wurde kein Satz gefunden. Bei Angabe von NEXT wurde das Ende der Datei erreicht. Bei Angabe von PRIOR wurde der Anfang der Datei erreicht. Bei Angabe von RELATIVE wurde, entsprechend dem angegebenen Wert, entweder der Anfang oder das Ende der Datei erreicht. Bei Angabe von FIRST oder LAST entspricht kein Satz den Auswahlkriterien. Der Name des Cursors lautet INSERT. -- Handelt es sich um eine eingebettete Anweisung SELECT, entspricht keine Zeile den Auswahlwerten. -- Handelt es sich um eine Anweisung UPDATE, INSERT oder DELETE, entspricht keine Zeile der Unterauswahl oder der Klausel WHERE; daher wurden keine Zeilen aktualisiert, eingefügt bzw. gelöscht. Fehlerbeseitigung: Es sind keine Maßnahmen erforderlich.
    0 Zeilen durch diese Anweisung betroffen
    Anweisung wurde erfolgreich mit Warnungen ausgeführt (58 ms)


    oder 2. Versuch:

    > INSERT INTO plib01.psbspf (psbs01, psbs10) VALUES ('000000000001', 'Testeintrag' CONCAT '1')
    SQL-Status: 02000
    Vendorencode: 100
    Nachricht: [SQL0100] Zeile für INSERT nicht gefunden. Ursache . . . . : Eine der folgenden Bedingungen ist eingetreten: -- Handelt es sich um eine Anweisung FETCH, entsprechen alle weiteren Zeilen nicht den Auswahlwerten (Ende der Datei). Der Name des Cursors ist INSERT, und die Ergebnislistenkennung ist 0. Ist die Ergebnislistenkennung nicht Null, wurde auf die Ergebnistabelle für diesen Cursor als Ergebnisliste einer gespeicherten Prozedur zugegriffen. -- Handelt es sich um eine Anweisung FETCH für einen verschiebbaren Cursor, wurde kein Satz gefunden. Bei Angabe von NEXT wurde das Ende der Datei erreicht. Bei Angabe von PRIOR wurde der Anfang der Datei erreicht. Bei Angabe von RELATIVE wurde, entsprechend dem angegebenen Wert, entweder der Anfang oder das Ende der Datei erreicht. Bei Angabe von FIRST oder LAST entspricht kein Satz den Auswahlkriterien. Der Name des Cursors lautet INSERT. -- Handelt es sich um eine eingebettete Anweisung SELECT, entspricht keine Zeile den Auswahlwerten. -- Handelt es sich um eine Anweisung UPDATE, INSERT oder DELETE, entspricht keine Zeile der Unterauswahl oder der Klausel WHERE; daher wurden keine Zeilen aktualisiert, eingefügt bzw. gelöscht. Fehlerbeseitigung: Es sind keine Maßnahmen erforderlich.
    0 Zeilen durch diese Anweisung betroffen
    Anweisung wurde erfolgreich mit Warnungen ausgeführt (102 ms)

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... probiere das SQL Statement doch mal mit einem richtigen SQL Werkzeug aus (grüner STRSQL, oder MS Query oder Squirrel mit Toolbox JDBC Driver) das sieht mir so aus als ob der Ooops da irgendwie nervt.

    D*B

    Zitat Zitat von BDehmel Beitrag anzeigen
    Leider schaffe ich es nicht, einen Screenshot einzufügen:

    > INSERT INTO plib01.psbspf (psbs01, psbs10) VALUES ('000000000001', CAST('Testeintrag' AS CHAR(60) CCSID 870))
    SQL-Status: 02000
    Vendorencode: 100
    Nachricht: [SQL0100] Zeile für INSERT nicht gefunden. Ursache . . . . : Eine der folgenden Bedingungen ist eingetreten: -- Handelt es sich um eine Anweisung FETCH, entsprechen alle weiteren Zeilen nicht den Auswahlwerten (Ende der Datei). Der Name des Cursors ist INSERT, und die Ergebnislistenkennung ist 0. Ist die Ergebnislistenkennung nicht Null, wurde auf die Ergebnistabelle für diesen Cursor als Ergebnisliste einer gespeicherten Prozedur zugegriffen. -- Handelt es sich um eine Anweisung FETCH für einen verschiebbaren Cursor, wurde kein Satz gefunden. Bei Angabe von NEXT wurde das Ende der Datei erreicht. Bei Angabe von PRIOR wurde der Anfang der Datei erreicht. Bei Angabe von RELATIVE wurde, entsprechend dem angegebenen Wert, entweder der Anfang oder das Ende der Datei erreicht. Bei Angabe von FIRST oder LAST entspricht kein Satz den Auswahlkriterien. Der Name des Cursors lautet INSERT. -- Handelt es sich um eine eingebettete Anweisung SELECT, entspricht keine Zeile den Auswahlwerten. -- Handelt es sich um eine Anweisung UPDATE, INSERT oder DELETE, entspricht keine Zeile der Unterauswahl oder der Klausel WHERE; daher wurden keine Zeilen aktualisiert, eingefügt bzw. gelöscht. Fehlerbeseitigung: Es sind keine Maßnahmen erforderlich.
    0 Zeilen durch diese Anweisung betroffen
    Anweisung wurde erfolgreich mit Warnungen ausgeführt (58 ms)


    oder 2. Versuch:

    > INSERT INTO plib01.psbspf (psbs01, psbs10) VALUES ('000000000001', 'Testeintrag' CONCAT '1')
    SQL-Status: 02000
    Vendorencode: 100
    Nachricht: [SQL0100] Zeile für INSERT nicht gefunden. Ursache . . . . : Eine der folgenden Bedingungen ist eingetreten: -- Handelt es sich um eine Anweisung FETCH, entsprechen alle weiteren Zeilen nicht den Auswahlwerten (Ende der Datei). Der Name des Cursors ist INSERT, und die Ergebnislistenkennung ist 0. Ist die Ergebnislistenkennung nicht Null, wurde auf die Ergebnistabelle für diesen Cursor als Ergebnisliste einer gespeicherten Prozedur zugegriffen. -- Handelt es sich um eine Anweisung FETCH für einen verschiebbaren Cursor, wurde kein Satz gefunden. Bei Angabe von NEXT wurde das Ende der Datei erreicht. Bei Angabe von PRIOR wurde der Anfang der Datei erreicht. Bei Angabe von RELATIVE wurde, entsprechend dem angegebenen Wert, entweder der Anfang oder das Ende der Datei erreicht. Bei Angabe von FIRST oder LAST entspricht kein Satz den Auswahlkriterien. Der Name des Cursors lautet INSERT. -- Handelt es sich um eine eingebettete Anweisung SELECT, entspricht keine Zeile den Auswahlwerten. -- Handelt es sich um eine Anweisung UPDATE, INSERT oder DELETE, entspricht keine Zeile der Unterauswahl oder der Klausel WHERE; daher wurden keine Zeilen aktualisiert, eingefügt bzw. gelöscht. Fehlerbeseitigung: Es sind keine Maßnahmen erforderlich.
    0 Zeilen durch diese Anweisung betroffen
    Anweisung wurde erfolgreich mit Warnungen ausgeführt (102 ms)
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL Insert in schleife
    By Robi in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 16-03-09, 10:32
  2. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  3. nach Insert neu gen. Datensatz ermitteln
    By M.Kasper in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 25-08-06, 07:32
  4. SQL Insert: Zeichenbegrenzung???
    By Deficiency in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-01-06, 09:00
  5. SQL Insert
    By Deficiency in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 01-12-05, 11:22

Berechtigungen

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