oulbrich
06-04-17, 14:11
Hallo zusammen,
das folgenden SQL Statment gibt die Wechselkurse von der Deutschen Bank zurück.
Führe ich das SQL aus werden die Werte korrekt ausgeben. Wenn ich das SQL nun eingebettet in RPG verwenden wird bei auslesen des Cursors der Fehler 57017 Character conversion is not defined zurückgegeben. Hat jemand ein Idee wir der Fehler abgestellt werden kann?
SQL Script
SELECT *
FROM
XMLTABLE('$doc/Envelope/Cube/Cube/Cube' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
('https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017','')
)
AS "doc"
COLUMNS
Subject VarChar(30) CCSID 1208 Path '../../../Subject',
Sender VarChar(30) CCSID 1208 Path '../../../Sender/Name',
valueDate char(8) Path '@valuedate',
Currency Char(3) Path '@currency',
ask Dec(10, 4) Path '@ask',
bid Dec(10, 4) Path '@bid'
)
AS WebServiceResult
Das RPG sieht so aus
// -----------------------------------------------------------------------------------------
// SQL Definitionen
// -----------------------------------------------------------------------------------------
dcl-proc SqlDef;
sql_txt=' -
SELECT * -
FROM -
XMLTABLE(''$doc/Envelope/Cube/Cube/Cube'' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB -
(''https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017'','''') -
) -
AS "doc" -
COLUMNS -
Subject VarChar(30) CCSID 1208 Path ''../../../Subject'', -
Sender VarChar(30) CCSID 1208 Path ''../../../Sender/Name'', -
valueDate char(8) Path ''@valuedate'', -
Currency Char(3) Path ''@currency'', -
ask Dec(10, 4) Path ''@ask'', -
bid Dec(10, 4) Path ''@bid'' -
) -
AS WebServiceResult -
';
exec sql prepare sql_stmt from :sql_txt; // SQL Text in Sql Statment
exec sql declare c1 cursor for sql_Stmt; // Cursor C1 mit Sql Statement verknüpfen
exec sql open c1; // Ausführem SQL Statement
end-Proc;
// -----------------------------------------------------------------------------------------
// Lesen Cursor C1
// -----------------------------------------------------------------------------------------
dcl-proc ReadCursorC1;
dow sqlstt <>'02000';
exec Sql fetch c1 into:DDS1;
if sqlstt ='02000';
return;
endIf ;
// Do something
enddo;
end-proc;
// -----------------------------------------------------------------------------------------
// Sql Definitionen
// -----------------------------------------------------------------------------------------
dcl-proc CloseCursor;
exec sql close C1;
end-Proc;
das folgenden SQL Statment gibt die Wechselkurse von der Deutschen Bank zurück.
Führe ich das SQL aus werden die Werte korrekt ausgeben. Wenn ich das SQL nun eingebettet in RPG verwenden wird bei auslesen des Cursors der Fehler 57017 Character conversion is not defined zurückgegeben. Hat jemand ein Idee wir der Fehler abgestellt werden kann?
SQL Script
SELECT *
FROM
XMLTABLE('$doc/Envelope/Cube/Cube/Cube' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
('https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017','')
)
AS "doc"
COLUMNS
Subject VarChar(30) CCSID 1208 Path '../../../Subject',
Sender VarChar(30) CCSID 1208 Path '../../../Sender/Name',
valueDate char(8) Path '@valuedate',
Currency Char(3) Path '@currency',
ask Dec(10, 4) Path '@ask',
bid Dec(10, 4) Path '@bid'
)
AS WebServiceResult
Das RPG sieht so aus
// -----------------------------------------------------------------------------------------
// SQL Definitionen
// -----------------------------------------------------------------------------------------
dcl-proc SqlDef;
sql_txt=' -
SELECT * -
FROM -
XMLTABLE(''$doc/Envelope/Cube/Cube/Cube'' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB -
(''https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017'','''') -
) -
AS "doc" -
COLUMNS -
Subject VarChar(30) CCSID 1208 Path ''../../../Subject'', -
Sender VarChar(30) CCSID 1208 Path ''../../../Sender/Name'', -
valueDate char(8) Path ''@valuedate'', -
Currency Char(3) Path ''@currency'', -
ask Dec(10, 4) Path ''@ask'', -
bid Dec(10, 4) Path ''@bid'' -
) -
AS WebServiceResult -
';
exec sql prepare sql_stmt from :sql_txt; // SQL Text in Sql Statment
exec sql declare c1 cursor for sql_Stmt; // Cursor C1 mit Sql Statement verknüpfen
exec sql open c1; // Ausführem SQL Statement
end-Proc;
// -----------------------------------------------------------------------------------------
// Lesen Cursor C1
// -----------------------------------------------------------------------------------------
dcl-proc ReadCursorC1;
dow sqlstt <>'02000';
exec Sql fetch c1 into:DDS1;
if sqlstt ='02000';
return;
endIf ;
// Do something
enddo;
end-proc;
// -----------------------------------------------------------------------------------------
// Sql Definitionen
// -----------------------------------------------------------------------------------------
dcl-proc CloseCursor;
exec sql close C1;
end-Proc;