This whole process is invoked through the exit point QIBM_QZDA_SQL2 with format ZDAQ0200.

Upper is 128 bytes because I needed something small enough to test with when I connected via ODBC. We have in production statements exceeding 32k and I only log a set size which would be bigger than 128 but less than 32k

I was trying to simplify the substring of the passed data and though that varying fields would handle it.

D*Typedef for the SQL exit point format #2 @A1A
D* Qzda SQL Format2
D EZDUP05 1 10
D* User profile name
D EZDSID05 11 20
D* Server identifier
D EZDFN06 21 28
D* User exit format name
D EZDFID05 29 32I 0
D* Requested function id
D EZDSN00 33 50
D* Statement name
D EZDCN00 51 68
D* Cursor name
D EZDPO00 69 70
D* Prepare option
D EZDOA00 71 72
D* Open attributes
D EZDPN01 73 82
D* Package name
D EZDPLN00 83 92
D* Package library name
D EZDRDACI00 93 94I 0
D* DRDA connect indicator
D EZDCI00 95 95
D* Commit indicator
D* Default SQL Collection @A1A
D EZDRSV1 106 108
D* Reserved @B2A
D EZDOECN 109 112I 0
D* Offset to ext'd cursor @B2A
D EZDLECN 113 116I 0
D* Length of ext'd cursor @B2A
D EZDRSV2 117 234
D* Res. for future use @B2C
D EZDQLSTL 235 238I 0
D* Length of SQL Stmt text@A1A
D*EZDSQLST00 239 239
D* Varying length
D* /* SQL statement text @B2C
D*EZDECN00 240 240
D* Varying length @B2A
D* Extended cursor name @B2A

On Jan 15, 2020, at 2:10 PM, Justin Taylor <JUSTIN@xxxxxxxxxxxxx> wrote:

I'd guess a pointer problem. How is EZDQLSTL defined, and how's it loaded?

-----Original Message-----
From: Chris Holko [mailto:christopherholko@xxxxxxxxx]
Sent: Wednesday, January 15, 2020 12:43 PM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: How do I clip a vary length field?

Okay, I am truly lost here. I am missing something really simple. this is a quick test program that fails when called by the exit with RNQ0115 when it does the upper=sqlstuff

RNQ0115 is Length of varying length variable is out of range.


/copy qsysinc/qrpglesrc,ezdaep
Dcl-s pEZDQLSTL pointer inz( %Addr( EZDQLSTL ) );

Dcl-s SQLStuff VarChar(32000: 4) Based( pEZDQLSTL );

Dcl-s Upper Varchar(128);

dcl-pr ODBCEXIT extpgm('ODBCEXITN');
allow char(1);
datain likeds(EZDSQLF2);

dcl-pi ODBCEXIT;
allow char(1);
datain likeds(EZDSQLF2);

allow = *on;
Upper = SQLStuff; // This will truncate to 1024 if needed.

*inlr = *on;


This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives

Please contact support@xxxxxxxxxxxx for any subscription related questions.

Help support by shopping at with our affiliate link:

This thread ...


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

This mailing list archive is Copyright 1997-2020 by 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].