On 02-Sep-2014 17:08 -0500, Gary Thompson wrote:
Using embedded SQL I can now call the SQL proc and get the
desired doc_num returned.
out_loc = 'ABCD';
cto_num = 1234567;
bat_dat = 1140902;
doc_num = *Blank;
Exec SQL CALL mysqlproc (:out_loc, :cto_num, :bat_dat, :doc_num);
Setting Break Points in the SQL proc worked but I was surprised at
the number of F10-Step and F12-Resume key presses needed to run the
proc?
The /debug view/ used for presenting the SQL source [DBGVIEW=*SOURCE]
effectively has an underlying debug view that, for any particular SQL
statement, may correlate to several C statements that implement just
that one SQL statement. Unfortunately the debugger actually performs
separately, each of the C statements used for implementation, until the
one SQL source-view statement is complete; that seems a plausible
explanation for the alluded need to perform so many step+resume "key
presses". While that effect could probably be /remedied/ [it is of
course, just software], I presume the cost to do so could not be
justified, thus the providers of the debugger are leaving the many SQL
programmers who are doing the debugging to be annoyed by the effect.
Next step is making the SQL proc query to get the library/schema
name from the out_loc input parm.
We have a local file which stores library by out_loc, but any hints
on coding this in an SQL proc will be very much appreciated. (I'm
reading 'Stored Procedures' and '7.1 Database SQL' PDFs)
I am not clear what is being implied about the OUT_LOC value. I
infer the implication is that a library name is being obtained from
somewhere [e.g. a data area] during run-time, thus the static DEFAULT
SCHEMA or static PATH values as defined at compile-time is incorrect for
the run-time. That is easily enough resolved by adjusting the
library-list [e.g. ADDLIBLE POSITION(*FIRST) with the retrieved library
name on the Library (LIB) specification] while both using the System
Naming option and avoiding library-qualified specifications in the SQL
statements.
One question I have is what exactly makes an SQL statement
'dynamic'?
Dynamic SQL means that the SQL statement is defined at run-time vs at
compile-time. With dynamic SQL a statement is [implicitly or
explicitly] PREPAREd from a string variable [or expression; e.g. a
concatenation of clauses and\or elements of clauses of the overall
statement]. An embedded statement is coded as SQL statement(s) quite
directly into the code, just as any HLL /statement/ is coded; the
embedded statement is pre-compiled and then compiled, such that the
statement is defined effectively in-full at compile-time. The dynamic
SQL, as a string, is [effectively] unable to be evaluated until
run-time, so will not be established as compile-time.
The difference between embedded SQL and dynamic SQL could be
described as what would be the difference between coding in RPG using
the following contrived and overly simplified examples, the first
representing a normal\embedded RPG statement being coded and the second
representing a pseudo-language dynamic equivalent; both performing a
concatenation of a literal period character onto the end of a string
that is defined by the variable named Sentence:
EVAL Sentence+='.'; // variable, operator, and operand(s)
EXEC 'EVAL Sentence+=''.'''; // perform what is defined by a string
I recently saw a statement that changing a table name requires
dynamic SQL,
A table-reference can not be defined by a [host] variable. There are
a variety of means to effect /changing/ the effective table-reference
without using dynamic SQL; thus dynamic is not /required/.
and have thought for some time that using dynamic SQL is more
reliable when switching libraries so that's been my habit for some
time.
If a supported\proper means to effect changing the library name for a
statement is not _reliable_, then either there is a defect or there is a
usage problem. The most common means that have been used since the S/38
to effect such a change are Library List (*LIBL) processing and
[possibly in combination with] the Override To Database File (OVRDBF);
the SQL support System Naming [NAMING(*SYS)] and the OVRDBF is just as
functional for SQL [for a To-File (TOFILE) and Member (MBR) name anyhow]
as for non-SQL database open and I\O activity. The SQL also offers
ALIAS support. Another alternative [along with other nuances that must
be understood], the SQL naming uses the authorization id [defaulting to
and typically the user name] to qualify unqualified references.
As an Amazon Associate we earn from qualifying purchases.