-
Wenn wir immer noch beim gleichen Problem sind und der andere Benutzer weiterhin den folgenden Fehler bekommt:
1 -- Das externe Programm oder Serviceprogramm hat SQLSTATE 42926
zurückgegeben. Die vom Programm zurückgegebene Textnachricht ist: LOB- und XML-Lokatoren sind mit COMMIT(*NONE) nicht zulässig.
... liegt es daran, dass in der Umgebung des Benutzers nicht unter Commitment Control gearbeitet wird.
Versuch doch einfach mal am Ende des INSERT Statements WITH CS hinzuzufügen.
Dann sollte das Insert Statement auch bei dem anderen Benutzer unter Commimtent Control ausgeführt werden, auch dann wenn in dieser Umgebung ohne Commitment Control gearbeitet wird.
Da das INSERT-Statement bei Dir funktioniert, gehe ich davon aus, dass die Tabelle in einem Journal hinterlegt ist.
Für die Verarbeitung in RPG würde ich für einen "kleinen" CLOB (65535 Zeichen) eine CLOB-Variable definieren und dann die Daten mit einem SELECT ... INTO, SET oder VALUES(...) INTO in diese CLOB-Variable ausgeben.
Code:
DCL-S CLOBVariableName SQLTYPE(CLOB: LängederCLOBVariablen)
Die CLOB-Variable wird vom SQL-Precompiler in eine Datenstruktur konvertiert, mit den folgenden Unter-Feldern:
CLOBVariableName_LEN UNS(10) => Datenlänge
CLOBVariableName_DATA (CHAR (LängeDerClobVariablen)) => Daten
Mit dem CLOBVariableName_DATA-Unter-Feld kann man in RPG ganz normal arbeiten und u.a. die Daten als Parameter an die nächste Prozedur durchreichen.
Was vielleicht noch zu bedenken wäre. Bei dem Datentypen XML handelt es sich um keinen String, sondern um eine interne Representation des XML.
Wenn Du das XML als Text (bzw. in RPG als CLOB) brauchst, musst Du das XML zunächst mit XMLSERIALIZE konvertieren.
Wenn Du das XML, so wie es ist in RPG übernehmen willst musst Du die Variable mit dem Datentypen XML_CLOB (und Länge) definieren. Auch hier wird eine Datenstruktur mit den beiden Unterfeldern _LEN und _DATA gebildet ... und _DATA wann mit RPG verarbeitet werden.
Birgitta
-
wir arbeiten ja nicht unter commit , dass ist ja was wir nicht verstehen ...
ist im RPG , die verwendung und nutzung von CLOBs zwingend mit comit verbunden ? gilt dies auch für das direkte SQL ?
habs mit With CS probiert und funktioniert nicht , die Tabelle wird nicht journalisiert , zur Info ...
-
Wir die Doku schon sagt, LOB's (CLOB/BLOB) setzen Commit-Control voraus. Beim Insert in die Tabelle muss diese journalisiert werden.
-
Dank eurer Hilfe und Unterstützung , vor allem auch von Britta , konnten wir zwischenzeitlich , die Daten aus dem IFS , qualifiziert in eine CLOB-Definierte File laden . Wir haben , nativ ( direkter SQL-Aufruf ) , auch von einem Fileserver , entsprechende XML-files laden und weiterverarbeiten können .
In einem SQLRPG ( embedded ) , klappt der Aufruf , mit entsprechendem qualifiziertem VALUE auch ohne Probleme . siehe hier das Beispiel :
exec sql insert into xx.xx values(get_clob_from_file('/home/geschi/test/clob/xxxxxxx.xml'))
wenn die file aber auf einem fileserver liegt , dessen pfad und filebezeichnung über 100 stellen lang ist, muss der Pfad mit einer Variablen angegeben werden. den pfad mit der entsprechenden File, können wir zusammenknoten. nur wie fügen wir, den Pfad als variable mit variabler länge korrekt in den SQL-Aufruf ein?
danke vorab für eure Hilfe.
-
und noch eine weitere Frage , wie debugge ich das SQLRPG , um die SQL-Anweisung zu prüfen und schrittweise den Programmfortschritt zu prüfen . mit *source in den PRE-compiler , hatte ich lediglich die RPG-Anweisungen prüfen können und , da der aufruf interaktiv erfolgte , im LOG einige Infos ...
-
Zu 1:
dcl-s MyFileName varchar(256);
exec sql insert into xx.xx values(get_clob_from_file(: MyFileName))
zu 2:
Ganz normal mit Debug(*source) und dann STRDBG oder über iseries Navigator:
https://www.ibm.com/support/pages/us...ries-navigator
Hier kann man dann mit F15 (glaube ich) auf verschiedene Sichten (Quelle, SQL, Liste) umschalten.
Die SQL's werden in call 'QSQxxx' umgesetzt.
-
zu1 , dies hatte ich probiert . Aber meine VAR hat Folgeleerstellen , gefüllt sind die ersten 112 stellen, der rest ist leer . beim ausführen erhalte ich einen Fehler zurück . wenn die VAR mit 112 länge definiert ist , klappt es .
kann ich die länge im SQL mitgeben ?
-
Entferne doch einfach die (evtl.) führenden und folgenden *Blanks:
Code:
exec sql insert into xx.xx values(get_clob_from_file(Trim(: MyFileName)));
Birgitta
-
funktioniert .. klasse ..
Super, vielen Dank ..
-
Den SQL-trim kann man sich eben sparen wenn man varchar verwendet.
Wenn allerdings das Quellfeld nicht varchar ist, kann man auch per
MyFileName = %trim(MyPath) + '/' + %trim(MyName);
verwenden.
Es gibt halt viele Wege zu SQL;-).
-
Ich habe mir angewöhnt, "varchar" Felder IMMER initialisiert zu definieren und/oder zur Sicherheit vorgängig einen clear darauf zu setzen. Dann klappt es auch mit der Feldlänge.
kf
-
Das nützt aber nichts bei einer Übertragung von Char in Varchar. Da werden die Blanks halt mitgeschleift.
Similar Threads
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 04-11-19, 07:59
-
By programmer400 in forum NEWSboard Drucker
Antworten: 7
Letzter Beitrag: 26-07-17, 10:58
-
By _MG_ in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 14-12-16, 15:45
-
By dibe in forum NEWSboard Programmierung
Antworten: 20
Letzter Beitrag: 25-02-16, 15:33
-
By gerhardsw in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 20-12-13, 09:27
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