John,
Thanks for pointing that out to me. Makes me feel a little better :)
Rob,
Here's the basics (trivial code changes, again no error handling though
with an addition to your select statement due to that lack of error
handling and really needing to only access physical tables/files as
systables has a few other items in it):
ctl-opt dftactgrp(*no);
dcl-pr RtvFD2;
fileIn char(10) const;
libIn char(10) const;
reuseSts char(10);
fileInd int(5) const;
libInd int(5) const;
reuseStsInd int(5);
sqlState char(5);
sqlName varchar(517) const;
sqlSpecific varchar(128) const;
sqlDiag varchar(1000);
end-pr;
dcl-pi RtvFD2;
fileIn char(10) const;
libIn char(10) const;
reuseSts char(10);
fileInd int(5) const;
libInd int(5) const;
reuseStsInd int(5);
sqlState char(5);
sqlName varchar(517) const;
sqlSpecific varchar(128) const;
sqlDiag varchar(1000);
end-pi;
dcl-pr RtvReuse extpgm('QDBRTVFD');
rcvVar char(65535) options(*varsize);
lenRcvVar int(10) const;
qualRtnFN char(20);
formatAPI char(8) const;
qualFileName char(20) const;
rcdFmtName char(10) const;
ovrPcs char(1) const;
system char(10) const;
formatType char(10) const;
errCde likeds(qusec);
end-pr;
/copy qsysinc/qrpglesrc,qusec
/copy qsysinc/qrpglesrc,qdbrtvfd
dcl-ds baseFD likeds(QDBQ25) based(ptrRcvVar);
dcl-ds pFAtrs likeds(QDBQ26) based(ptrPFAtrs);
dcl-ds errCde qualified;
hdr likeds(qusec);
errDta char(256);
end-ds;
dcl-s ptrPFAtrs pointer;
dcl-s ptrRcvVar pointer inz(%addr(rcvVar));
dcl-s qualRtnFN char(20);
dcl-s rcvVar char(4096);
dcl-s theFile char(10) inz('MYFILE');
errCde.hdr.QUSBPrv = 0;
RtvReuse( rcvVar :%size(rcvVar) :qualRtnFN
:'FILD0100' :(fileIn + libIn) :' *FIRST'
:'0' :'*LCL' :'*INT'
:errCde);
ptrPFAtrs = ptrRcvVar + baseFD.QDBPFOf;
if %bitand(pFAtrs.QDBBits33 :x'80') = x'80';
reuseSts = 'YES';
else;
reuseSts = 'NO';
endif;
*inlr = *on;
return;
To create the function:
create or replace function Reuse_Deleted_Records
( tableName char(10)
,schemaName char(10)
)
returns char(10)
external name 'VINING/RTVFD2'
program type main
language rpgle
parameter style sql
returns null on null input
no external action
not fenced
And to test it (with a recommendation to qualify the library as I do below):
Select system_table_name, system_table_schema,
Reuse_Deleted_Records(system_table_name,system_Table_schema)
From systables
where table_type in ('P', 'T')
and system_table_schema = 'VINING'
I did provide at least the interface to handle null inputs though that
logic would need to be added and the returns null on null input removed
from the create.
Bruce
On Thu, Jan 16, 2020 at 3:12 PM John Yeung <gallium.arsenide@xxxxxxxxx>
wrote:
On Thu, Jan 16, 2020 at 3:07 PM Bruce Vining <bruce.vining@xxxxxxxxx>
wrote:
You're right of course. For some reason I just had DSPFFD on my mind
(and
didn't re-read the original reference to DSPFD).
The reason you had DSPFFD on your mind is that OP (Gord) and I both
did as well. The very first post in this thread had the correct
command, but then OP's own subsequent post introduced DSPFFD, and I
just ran with that.
John Y.
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: MIDRANGE-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/midrange-l.
Please contact support@xxxxxxxxxxxx for any subscription related
questions.
Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com
As an Amazon Associate we earn from qualifying purchases.