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



I just got bit by this "feature" of the precompiler - have a program that has embedded SQL - when I put in some SQL CLI stuff, to use a stored procedure with result set in RPGLE, I got a message saying that a certain column in a file was an invalid timestamp.

I thought it was a conflict between CLI and embbeded SQL - I thought I'd read somewhere to be careful when mixing the 2 - but I finally went through the pain of adding 1 thing at a time and see what breaks it.

The thing that broke it was when I declared a variable in a subprocedure that had the same name as a column from a table used in an embedded select statement - and I also had an f-spec for that table. What happened is, the precompiler mapped the select field list to positions in the input buffer - please don't correct me too hard here if i'm a little off - it's close enough for me to solve the problem - heh.

When the variable with the duplicate name was present, that field was completely omitted from the mapping that the precompiler did - and in this case it moved what it thought was a timestamp to the start of the field that should have been there - nasty, what?

The IBM support guy - partnerworld support - was surprised - but this is just to confirm what was just said - use different names - even if they are coming from an f-spec - v5r4 lets you use the same name, so long as it is the same data type and length - and it can even be tolerant of different lengths.

A long story with a good ending was this - heh

Vern
At 12:56 PM 6/19/2007, you wrote:


The difference between *LVL1 and *LVL2 is that *LVL2 will
expand the /INCLUDE directive as well as everything *LVL1 does.

Please keep in mind that the precompiler does not have a
concept of scoping. My guess is that the global variable
you are using in the subprocedure is also defined in a
different subprocedure. The precompiler is finding two
variables with the same name. There are some exceptions
to be able to use variables that are defined multiple times,
but is is recommended to use a unique name.




>date: Tue, 19 Jun 2007 18:44:17 +0200
>from: "David Foxwell" <david.foxwell@xxxxxxxxx>
>subject: RPG SQL precompiler
>
>Hi,
>
>I have some global variables coded by /COPY QRPGLESRC MyVars
>
>I'm compiling with CRTSQLRPGI RPGPPOPT(*LVL1) -tried *LVL2 but don't
understand the difference.
>
>When I try to use one of these variables as a host variable in an EXEC SQL
in a subprocedure I get the message SQL0312 that the variable >isn't
declared.
>I'm having to declare another variable in the main program source.

--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


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.