× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.