-
httpPostBlobVerbose und negativer SQLCODE im SQLRPGLE
Hallo,
wir wollen die SQL httpPostBlobVerbose Funktion zum Upload von Dateien nutzen.
Mir ist nun aufgfallen, das wenn ich von der Gegenseite einen http Code ungleich 2xx zurückbekomme, ich auch einen SQL Fehler bekomme. Im interaktiven SQL sehe ich aber dennoch im Ergebnis den zurückgelieferten http Header. Im SQLRPGLE wird die Host Variable allerdings nicht gefüllt, wenn der SQL Befehl nicht erfolgreich war.
Gibt es eine Möglichkeit trotzdem an den zurückgelieferten Header zu kommen bzw. das füllen der Host Variablen zu erzwingen? Vielleicht eine SQL Option o.ä.?
Gruß,
Manuel
-
https://www.ibm.com/support/knowledg...tpoverview.htm
includeErrorMsg = true
sollte ggf. Informationen liefern.
-
Hallo Manuel,
wie seht denn dein SQL genau aus?
Es gibt einen Message-Part und einen Header-Part.
Der Header-Part sollte immer zurückgeliefert werden, wenn es vom Server einen Antwort gibt.
Du bekommst nur nichts zurück, wenn du versuchst auf einen Host zuzugreifen, der nicht existiert oder ein Timeout bekommst.
lg Andreas
-
@Andreas:
Den Header Part bekomme ich auch zurück, allerdings nur wenn ich den SQL interaktiv im ACS ausführe. Aber auch im ACS sehe ich im Protokoll den SQL Fehler. Das Problem ist, das wenn ich einen negativen SQLCODE im RPG bekomme, meine Host Variablen nicht gefüllt werden.
Einen negativen SQLCODE bekomme ich sobald, der http code ungleich 2xx ist. Also z.B. auch wenn die Authentifizierung ungültig ist.
Das ist der Quellcode:
exec sql
select t.responseHttpHeader into :responseHttpHeader
from table(systools.httppostblobverbose(:url, :httpHeader, :blobFile)) t;
if (SQLCODE <> 0);
writeLog('postFile': '20':responseHttpHeader);
writeLog('postFile': '20':'httppostblobverbose() failed. SQLCODE: ' + %char(SQLCODE));
return *off;
endif;
Das ist übrigens die Message die ich im ACS neben dem Ergebnis sehe:
SQL State: 01H52 Vendor Code: 462 Message: [SQL0462] Prozedur oder benutzerdefinierte Funktion HTTPPOSTCLOBVERBOSE in SYSTOOLS hat einen SQLSTATE der Art Warnung zurückgegeben. Ursache . . . . : Ein SQLSTATE im Format 01xxx wurde von der Prozedur oder der benutzerdefinierten Funktion HTTPPOSTCLOBVERBOSE in SYSTOOLS (mit SPECIFIC NAME HTTPP00015) zusammen mit Nachrichtentext Server returned HTTP response code: 401 for URL: https://accounts.accesscontrol.windo...tokens/OAuth/2 zurückgegeben. Fehlerbeseitigung: Dem Benutzer muss die Bedeutung der Warnung klar sein. Den Datenbankadministrator oder den Autor der benutzerdefinierten Funktion oder Prozedur zu Rate ziehen. Statement ran successfully, with warnings
-
@Fuerchau
includeErrorMsg ändert leider nichts am Ergebnis bzw. SQLCODE.
-
Ich muss gestehen, ich selbst führe das SQL immer im Zuge eines INSERT INTO aus.
Also
Insert Into ... from final table (select * from ...)
Dann hab ich den HTTP Header und die Response Message zusammen.
Durch die Tabelle kann man das ganze sehr gut tracken, was wann für ein Request übermittelt wurde (ich speichere mir auch die URL ab) und was ich als Antwort erhalten habe.
Da hab ich dann auch HTTP Error Codes 3xx, 4xx usw. drinnen stehen.
-
Ja das hatte ich in einem anderen Beitrag von dir auch gelesen und werde ich dann wohl auch genauso machen.
Ich hatte nur die Hoffnung, das wenn so eine Funktion angeboten wird, ich auch ohne Umwege an das Ergebnis komme. Das ein http Code ungleich 2xx zurück kommt, ist ja nichts ungewöhnliches und sollte meiner Meinung nach nicht zu einem SQL Fehler/Warning führen.
Ich werd dafür mal ein RFE einstellen.
Danke & Gruß,
Manuel
-
Letzteres ist auch zu empfehlen.
Ich hatte auch ein Problem mit einer selbst gestrickten Table-Function.
Der "INSERT INTO .... select * from table (...)" lieferte auch eine Warnung, die an das Programm allerdings mit einem positiven SQLCODE gemeldet wurde.
Ein RUNSQLSTM kam sogar dann mit einem Fehler SQL9xxx (Systemfehler) zurück obwohl alles i.O. war.
Hier hilft tatsächlich nur ein Wrapper, da die Ausgabe ja unabhängig erstellt wurde.
-
Hallo Manuel,
falls du das Problem noch hast, ich konnte das für mich wie folgt lösen
Im RPG einmal mit ifNull damit ich die null Werte verarbeiten kann
Exec Sql
SELECT IfNull(responseMsg, ''),
VarChar(IfNull(responseHttpHeader, ''), 1500)
INTO :zzCLOB, :ResponsHeader
FROM table(
SYSTOOLS.HTTPGETCLOBVerbose(:host, :Header)
) as Ws;
Die includeErrorMsg Option muss httpHeader als Atributt angegeben werden und nicht als Feld was ich vorher immer falsch gemacht hatte
ich hoffe das konnte dir helfen
MfG Malte
-
Hallo Malte,
war jetzt eine Woche im Urlaub... Hatte am Freitag vorletzter Woche auch zum Test mein SQL ähnlich wie du es vorschlägst mal angepasst, hab anstelle von ifnull coalesce genommen.
Aber super, dann war das ja kein Zufall sondern scheinbar die Lösung um an den Header zu kommen.
Finde ich persönlich auch besser, da man sich die Zwischentabelle spart.
Danke für deinen Tipp.
Gruß,
Manuel
-
Hast Du Dir eigentlich mal die Funktion HTTPHEAD (in Bibliothek SYSTOOLS) angesehen?
HTTPHEAD Scalar Function.
Im übrigen würde ich die JSON-Daten nicht in eine RPG-Variable einlesen ... um dann die Daten wohl auch noch mit YAJL auflösen zu können. Mit dieser Lösung können nur JSON-Dokumente mit maximal 16MB eingelesen werden.
Wenn die Daten dagegen direkt mit SQL aufgelöst werden, können JSON-Datem bis zu 2 GB verarbeitet werden.
Birgitta
-
Die HTTPHEAD Funktion hatte ich einmal überflogen, dann aber nicht weiterverfolgt, weil auf der Gegenseite nicht implementiert ist.
Die Limitierung der RPG Variablen auf 16MB war/ist mir bewusst, kann ich aber bei den Funktionen die ich aufrufen muss in Kauf nehmen. Im ersten Schritt mache ich einen HTTPPOSTCLOB und die maximale Größe der Antwort ist 4MB. Bei dem HTTPPOSTBLOB bekomme ich im Body und Header maximal 1MB zurück, wobei mich nur der Header interessiert.
YAJL benutze ich nicht. Nach dem Besuch deiner XML/JSON Schulung vor 2 (oder 3) Jahren verwende ich ausschließlich die Funktionen die die Datenbank mitbringt und bisher gabe es nichts was mit SQL nicht umsetzbar war.
Danke & Gruß,
Manuel
Similar Threads
-
By Hawi in forum NEWSboard Programmierung
Antworten: 26
Letzter Beitrag: 04-11-21, 20:49
-
By mahones in forum NEWSboard Programmierung
Antworten: 31
Letzter Beitrag: 02-04-20, 10:21
-
By Hubert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 14-10-19, 13:02
-
By malzusrex in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 09-06-16, 11:36
-
By nico1964 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 29-06-15, 06:53
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