-
JVAGATE mit Sonderzeichen in CHAR-Feldern
Hallo zusammen,
ich verwende JVAGATE für den Zugriff auf verschiedene ext. Datenbanken, funktioniert alles super. (Thx DB).
Jetzt ist eine Oracle-DB (FIBU) dazugekommen, funktioniert auch generell.
Die Verarbeitung habe ich in SQLRPG-Pgm's, dort connecte ich zu den DB's, Öffne Cursor, leses Sätze, schließe Cursor und schliesse die Verbindung wieder !
Mein Problem
In manchen Sätzen sind Sonderzeichen wie z.B. "%" gespeichert, und ich falle beim FETCH in meinem SQLRPG-Pgm auf die Nase, SQL-Code ist dann -969!
Mit dem DB-Tool SQuirreL funktioniert der Zugriff fehlerfrei !
Das kann doch nur bedeuten, dass ich am/in meinem SQLRPG-Pgm in Sachen "Zeichensatz" etwas "machen" muss, oder ???
Danke vorab + Vg.
-
Also "%" ist noch kein Sonderzeichen sondern bewegt sich noch im ASCII-Bereich.
Oracle speichert i.d.R. in UTF8, also Unicode.
Wenn deine Hostvariablen vom Typ "C" sind (UCS2), hast du mit Oracle keine Probleme.
Willst du die Daten im RPGLE konvertieren benötigt dein Job zur Laufzeit eine gültige CCSID!
*HEX (65535) geht da nicht mehr!!!
Dann konvertiert die Zuweisung (eval) automatisch zwischen UCS2 und deinem SBCS-Feld.
Aber Achtung: UCS => SBCS führt bei nicht konvertierbaren Zeichen zu "?".
Wichtig bei der ganzen Sache ist noch, dass du auf jeden Fall mit Parametermarkern arbeitest.
Also:
MySQL = 'Select a, b, c from OracleTab where K1=?';
execute SQL prepare Statement ….
execute SQL open MyCursor using : HostK1;
Ähnliches musst du dann auch mit Insert/Update/Delete machen, der Fetch benötigt das ja sowieso schon.
Parametermarker vereinfachen das Handing i.Ü. und beschleunigen erheblich, da nicht ständig prepared werden muss.
-
... same procedure as every year:
- log4j auf debug stellen
- restart des Serverprozesses
- im logfile nachsehen
- nix gefunden? mit minimalisiertem Beispiel an D*B schicken.
D*B
-
 Zitat von Fuerchau
Also "%" ist noch kein Sonderzeichen sondern bewegt sich noch im ASCII-Bereich.
Oracle speichert i.d.R. in UTF8, also Unicode.
Wenn deine Hostvariablen vom Typ "C" sind (UCS2), hast du mit Oracle keine Probleme.
Willst du die Daten im RPGLE konvertieren benötigt dein Job zur Laufzeit eine gültige CCSID!
*HEX (65535) geht da nicht mehr!!!
Dann konvertiert die Zuweisung (eval) automatisch zwischen UCS2 und deinem SBCS-Feld.
Aber Achtung: UCS => SBCS führt bei nicht konvertierbaren Zeichen zu "?".
Wichtig bei der ganzen Sache ist noch, dass du auf jeden Fall mit Parametermarkern arbeitest.
Also:
MySQL = 'Select a, b, c from OracleTab where K1=?';
execute SQL prepare Statement ….
execute SQL open MyCursor using : HostK1;
Ähnliches musst du dann auch mit Insert/Update/Delete machen, der Fetch benötigt das ja sowieso schon.
Parametermarker vereinfachen das Handing i.Ü. und beschleunigen erheblich, da nicht ständig prepared werden muss.
Danke...aber der SQL-Befehl ist fix und fertig, ich arbeite an dieser Stelle nicht mit "using"...
-
 Zitat von BenderD
... same procedure as every year:
- log4j auf debug stellen
- restart des Serverprozesses
- im logfile nachsehen
- nix gefunden? mit minimalisiertem Beispiel an D*B schicken.
D*B
Hallo D*B,
danke...
- log4j auf debug stellen
...das sind diese hier ???
thx.
-
bei der vorletzten Zeile den # rausmachen
-
" ich arbeite an dieser Stelle nicht mit "using"..." ist halt häufiger ein Problem gerade bei der Verwendung von Unicode.
Das SQL-Statement selber ist meist nicht Unicode und somit könnte man nicht mit Unicodedaten im SQL arbeiten.
Dieter schreibt allerdings auch einiges ins Joblog.
-
 Zitat von BenderD
bei der vorletzten Zeile den # rausmachen
Danke, werde ich heute Abend testen, wenn ich alleine zugreife.
Thx.
-
Hallo D*B
ich bin hier nun ein Stück weiter, es sind nicht (unbedingt) Sonderzeichen die zum Fehler führen.
In der Oracle DB sind die Infofelder, die der Anwender durchaus auch mit Sonderzeichen beschreibt, im Format 4000 VARCHAR.
Wenn ich ohne CAST arbeite, läuft beim ArdGate etwas über (ich habe die Fehlermeldung gerade nciht, aber irgendetwas mit Index und > 257, kann ich aber noch wieder "produzieren").
Ich habe jetzt mit CAST die Infofelder auf 256 Stellen begrenzt und komme damit dann auch erst einmal weiter.
Danke + Vg.
-
... hast Du die aktuelle Version, ich erinnere mich dunkel an eine Fehlerbehebung. Ansonsten wäre ein Beispiel und das log hilfreich.
D*B
-
Ich glaube ich habe nicht die aktuelle Version, ich habe vor ein paar Wochen (Monaten :=( ) ) gesehen, dass es eine "neue" Version gibt, habe die auch geladen, aber noch nicht installiert, bin ich einfach nicht zu gekommen.
Das werde ich aber nun zuerst machen, danach probiere ich es nochmals aus.
Ich melde mich wieder dazu...
Danke + Vg.
Similar Threads
-
By Peet in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 25-06-19, 10:59
-
By labm in forum NEWSboard Programmierung
Antworten: 20
Letzter Beitrag: 05-06-18, 08:09
-
By svit in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 18-09-14, 11:14
-
By Peet in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 25-03-14, 13:41
-
By Gimli in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 04-03-03, 15:20
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks