I'm a newbie to DB2 and am trying to figure out how to write a stored
procedure, using dynamic SQL statements to return a result set. I
believe the majority of the hurdles I have been facing might be due to
the fact that the samples and postings I have read have been related
to the UDB... I believe our company is on some version of MVS or
OS/390, but I am not sure which one, at the time of this posting.
I have an example, below, of a HelloWorld procedure that is currently
working in our environment, and would like to know how to convert it
to use a dynamic SQL statement. I have made a first attempt at
getting this to work and am also providing an example of that below.
Rather than dealing with the environmental issues I may be facing,
what I'm really hoping for is validation of the approach and syntax I
am using or guidance in getting a "Simple" HelloWorld with dynamic SQL
returning a result to work.
Be gentle on me... ;-) I am a Windows developer with Oracle and SQL
Server database experience. This MVS, OS/390 and DB2 environment is a
whole new world for me!
Thanks in advance for any assistance!
Todd
========== FUNCTIONAL HELLOWORLD PROCEDURE =========
CREATE PROCEDURE OTDSTPR.SP0200 ( IN in_client_id char(12),
OUT SQLSTATE_OUT char(5),
OUT SQLCODE_OUT int )
RESULT SETS 1
LANGUAGE SQL
MODIFIES SQL DATA
COLLID OTDSTPR
WLM ENVIRONMENT DBSOTD00
ASUTIME LIMIT 50000
RUN OPTIONS 'NOTEST(ALL,*,,VADTCPIP&172.16.7.109:*)'
P1: BEGIN
-- Declare variables
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE SQLCODE INT DEFAULT 0;
-- Declare Cursor
DECLARE myCursor CURSOR WITH RETURN FOR
SELECT DISTINCT
'HELLO WORLD', C.CLIENT_LONG_NM AS CLIENT
FROM CLIENT C
WHERE
(
C.CLIENT_ID = in_client_id
OR
in_client_id = 'ALL'
)
WITH UR;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT SQLSTATE, SQLCODE INTO SQLSTATE_OUT, SQLCODE_OUT
FROM SYSIBM.SYSDUMMY1;
open myCursor;
SET SQLSTATE_OUT = SQLSTATE;
SET SQLCODE_OUT = SQLCODE;
END P1
======= END FUNCTIONAL HELLOWORLD PROCEDURE =======
========== MY DYNAMIC ATTEMPT... =========
CREATE PROCEDURE OTDSTPR.SP0207 ( IN in_client_id char(12),
OUT SQLSTATE_OUT char(5),
OUT SQLCODE_OUT int )
RESULT SETS 1
LANGUAGE SQL
MODIFIES SQL DATA
COLLID OTDSTPR
WLM ENVIRONMENT DBSOTD00
ASUTIME LIMIT 50000
RUN OPTIONS 'NOTEST(ALL,*,,VADTCPIP&172.16.7.109:*)'
P1: BEGIN
-- Declare variables
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE SQLCODE INT DEFAULT 0;
DECLARE stmt VARCHAR(1000);
DECLARE c_clients CURSOR WITH RETURN TO CLIENT FOR s1;
SET stmt = 'SELECT CLIENT_ID, CLIENT_LONG_NM FROM OTIOTD.AF7 WHERE
CLIENT_ID = ?';
PREPARE s1 FROM stmt;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT SQLSTATE, SQLCODE INTO SQLSTATE_OUT, SQLCODE_OUT
FROM SYSIBM.SYSDUMMY1;
OPEN c_clients USING in_client_id;
SET SQLSTATE_OUT = SQLSTATE;
SET SQLCODE_OUT = SQLCODE;
END P1
========== END MY DYNAMIC ATTEMPT... =========