Specify SQL Table-creation Library at Runtime
April 25, 2012 Hey, Ted
|
I have an RPG programs that creates work tables in QTEMP. I’d like to be able to specify the library at runtime. I tried using a host variable for the library in a CREATE TABLE command, but that didn’t fly. I am using the system naming convention. Can you help? –Ben I wish CREATE TABLE would allow a host variable for the explicit qualifier, but it doesn’t. Here are a few ways that work. 1. Use dynamic SQL. Embed the library name in the SQL command.
D SqlCommand s 256a varying
D WorkLib s 10a
/free
*inlr = *on;
SqlCommand = ('create table ' + %trim(WorkLib) +
'/SomeTable +
(OneFish char(3), +
TwoFish dec (5,0), +
RedFish char(1), +
BlueFish date)');
exec sql
execute immediate :SqlCommand;
2. Use the CURRENT SCHEMA special register with dynamic SQL. Note that the CREATE TABLE command does not include a qualifier.
D SqlCommand s 256a varying
D WorkLib s 10a
/free
*inlr = *on;
exec sql
set Current Schema = :WorkLib;
SqlCommand = ('create table SomeTable +
(OneFish char(3), +
TwoFish dec (5,0), +
RedFish char(1), +
BlueFish date)');
exec sql
execute immediate :SqlCommand;
3. Change the current library. Be aware that the system will not allow you to set the current library to QTEMP. You might want to reset it before the job ends. A portion of the CL caller:
dcl &CurLib *char 10
/* change the current library */
rtvjoba curlib(&CurLib)
chgcurlib SomeLib
/* do the work */
call rpgpgm
/* reset the current library */
if (&CurLib *eq *NONE) +
then( chgcurlib *CRTDFT)
else ( chgcurlib &CurLib)
A portion of the RPG “callee”:
exec sql
create table SomeTable
(OneFish char(3),
TwoFish dec (5,0),
RedFish char(1),
BlueFish date);
|

