Thanks Brian for pointing this out to me.
So changed the rpgsrc
exec sql
declare c1 cursor for
select *
from table(SYSTOOLS.SPLIT('12|12345', '|')) ;
exec sql
open c1;
dou SQLCOD<>0;
exec sql
fetch C1 into :value1u, :value2u;
value(x).value1 = value1u;
value(x).value2 = value2u;
x += 1;
enddo;
exec sql
close C1;
dump;
*inlr = *on;
Got an array with element seq# and value.
Thanks again.
Best regards,
Danny
-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of Brian Parkins
Sent: woensdag 22 mei 2019 13:59
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: using SYSTOOLS.SPLIT
Not sure what you're asking, Danny. All of your three examples are working as best they can.
If I understand correctly, SYSTOOLS.SPLIT returns two result columns:
Column Name Data Type Description
ORDINAL INTEGER The relative position of this element in the input string. The first row has a value of 1.
ELEMENT CLOB(2G) The value of the element.
Note the second column is a CLOB. I guess STRSQL cannot cope - hence *POINTER.
The ACS Run SQL Statements facility is more sophisticated works OK, (though this doesn't show in your cut/paste) It is able to cope with the CLOB return column. Note you have two rows being returned.
The SQLRPGLE example half-works - though I would suggest you define the second return column differently. You have the first row returned - but not the second. Your program does not accommodate multiple rows and you'll find a corresponding error message, SQL0811 (which you're not trapping - so the program continues to the end). Perhaps you should code for a file cursor?
HTH,
Brian.
On 22/05/2019 12:05, Danny Rodius wrote:
Hi,
Installed the latest TR6 and started to test some of the new stuff.
When running the STRSQL with a command like
select * from table(SYSTOOLS.SPLIT('12|12345','|'))
I got a list:
ORDIN00001 ELEMENT
1 *POINTER
2 *POINTER
Running the same sql statement in ACS- RunSQL scripts I got
Now trying this in sqlrpgle
**free
ctl-opt debug(*yes);
dcl-ds values;
value1 int(10);
value2 int(10);
end-ds;
exec sql
select *
into :values
from table(SYSTOOLS.SPLIT('12|12345', '|')) ;
dump;
*inlr = *on;
Now the dump got me the follow:
VALUES DS
VALUE1 INT(10) 1 '00000001'X
VALUE2 INT(10) 12 '0000000C'X
Anyone an idea?
Best regards,
Danny
As an Amazon Associate we earn from qualifying purchases.