I thought that using UNION ALL might be better, like...
Code:
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT id FROM schema.tableA
WHERE parm = 0
UNION ALL
SELECT id FROM schema.tableB
WHERE parm = 1
UNION ALL
SELECT id FROM schema.tableC
WHERE parm = 2
;
More to say,
it must be better to incorporate directly such simple query into Java code(or any host programs) than to create a procedure.
If same query was used in many programs, create a view for the query, like...
Example 1:
Code:
CREATE OR REPLACE VIEW get_id_by_parm AS
SELECT id , parm
FROM schema.tableA
, (SELECT 0 FROM sysibm.sysdummy1) p(parm)
UNION ALL
SELECT id , parm
FROM schema.tableB
, (SELECT 1 FROM sysibm.sysdummy1) p(parm)
UNION ALL
SELECT id , parm
FROM schema.tableC
, (SELECT 2 FROM sysibm.sysdummy1) p(parm)
;
The view in Example 1 worked efficiently on my DB2 9.7.5 on Windows/XP,
if a value for parm was hardcoded.
(Only the schema.tableB was accessed, if "parm = 1" was specified.)
Code:
------------------------------ Commands Entered ------------------------------
SELECT id
FROM get_id_by_parm
WHERE parm = 1
;
------------------------------------------------------------------------------
ID
-----------
201
1 record(s) selected.
Extracted from output of db2exfmt
Code:
Original Statement:
------------------
SELECT id
FROM get_id_by_parm
WHERE parm = 1
Optimized Statement:
-------------------
SELECT Q1.ID AS "ID"
FROM SCHEMA.TABLEB AS Q1
Access Plan:
-----------
Total Cost: 0.0295303
Query Degree: 1
Rows
RETURN
( 1)
Cost
I/O
|
1
IXSCAN
( 2)
0.0295303
0
|
1
INDEX: SYSIBM
SQL120125114122000
Q1
Test data was created by the following:
Code:
------------------------------ Commands Entered ------------------------------
CREATE TABLE schema.tableA
( id INTEGER NOT NULL PRIMARY KEY
, desc VARCHAR(30)
);
CREATE TABLE schema.tableB
( id INTEGER NOT NULL PRIMARY KEY
, desc VARCHAR(30)
);
CREATE TABLE schema.tableC
( id INTEGER NOT NULL PRIMARY KEY
, desc VARCHAR(30)
);
------------------------------------------------------------------------------
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
------------------------------ Commands Entered ------------------------------
INSERT INTO schema.tableA
( id )
VALUES 101 , 102 , 103
;
INSERT INTO schema.tableB
( id )
VALUES 201
;
INSERT INTO schema.tableC
( id )
VALUES 301 , 302 , 303 , 304 , 305
;
------------------------------------------------------------------------------
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.