× 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.



On 02 May 2012 15:24, Gqcy wrote:

Initially I was just performing the call to a program
with 2 parms, the 2nd parm being 64 long.

CALL GEMLIB.GEMC911('ACTQRY8 '
,'Query over the Accounts Payable system Returns Unpaid vendors')

So the above was a CALL from SQL without having declared or created a PROCEDURE to define the interface; as implied by the next comment.? Was there verification that a PROCEDURE by that name does not already exist, but with CHAR(32); query SYSROUTINE or SYSPROCS, and if found, then SYSPARMS.

What release? A change to how undeclared procedure calls are made was mentioned in the v6r1 or v7r1 Memo to Users.

Was the program under debug and the program variable displayed, from which the "getting truncated at 32 positions" was concluded? If not, debug should be used to verify. If so, how was debug used to verify the effect; e.g. EVAL ParmVarName, EVAL ParmVarName:x, etc.?

For an undeclared procedure for which the called program is CLP [or perhaps for any OPM, the SQL automatically passes all arguments as IN, and I believe also as CHAR versus VARCHAR]. In order to ensure padded data is sent, the following should suffice; though the subject seems to imply this is not merely padding:

CALL GEMLIB.GEMC911
('ACTQRY8 X' /* force full 10 bytes into CLP parm-1; 64 parm-2 */
,'Query over the Accounts Payable system Returns Unpaid vendors X')
/*....+....1....+....2....+....3....+....4....+....5....+....6....+

I then tried to create a stored procedure, and it was doing the same
truncation:

CREATE PROCEDURE GEMLIB/GEMC911
(IN APPID CHAR (10 ), IN APPDESC CHAR (64 ))
LANGUAGE CL DETERMINISTIC NO SQL CALLED ON NULL INPUT
EXTERNAL NAME PPROGLIB/GEMC911 PARAMETER STYLE GENERAL

Because normally the constant [literal] for the second argument would be typed as VARCHAR, one could imagine possibly that the SQL had dismissed that PROCEDURE definition via /function resolution/ and thus just called the existing program, same as when no declaration was available. And that would explain the same effect for both CALLs. However in my experience, the SQL never defers to an undefined call when at least one routine definition exists [¿with the same number of parameters?]; be that a declared or created procedure.

FWiW the parameter style and allowance for NULL seem in conflict for the LANGUAGE CL. The identical CREATE PROCEDURE is not prevented in v5r3 [either]. Nonetheless, should probably use the RETURNS NULL ON NULL INPUT or the equivalent synonym because the CL would not know of NULL.?

I created a command, and defined the parms correctly, but can I
"execute" the command from SQL???

Yes, but the described issue should still be investigated. And the same origin for the described difficulty might impact the attempt to circumvent by using a command, because the command string is going to be another long string. Here is an example [using an undeclared procedure call to the CL command string processor QSYS/QCMDEXC]:

CALL QSYS.QCMDEXC
('GEMLIB/GEMC911CMD APPID(ACTQRY8) APPDESC(''Some text'')'
/*....+....1....+....2....+....3....+....4.\...+....5.\..*/
, 0000000053.00000) -- adjust 2nd parm to reflect CmdStrLen

What do I need to do to get the data not to truncate?

Is the client truncating the data somehow; e.g. perhaps not really using a literal? How is the request being made from the client? Does the client perhaps know there is no routine defined, and transforms the request into a CL CALL instead? That would

There is an API that will show the last SQL run in the [server] job. I recall that information is available from within iNav; I do not recall where, probably jobs vs database. That information might be telling. I do not recall how helpful information might be for a CALL, from the details logged by the DB monitor.

Regards, Chuck

As an Amazon Associate we earn from qualifying purchases.

This thread ...


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.