将变量从DB2返回到结果集
本文关键字:结果 返回 DB2 变量 | 更新日期: 2023-09-27 18:04:26
从我的c#应用程序中,我想从数据库中获得一个shipmentnumber,如果记录不存在,那么我将创建它并返回新的shipmentnumber。现在,我已经在DB2中创建了一个存储过程,在这个过程中,我将一个名为SHIPNR的变量声明为十进制。现在我想要这个变量作为结果集返回。我有这部分代码:
BEGIN
DECLARE SHIPMENTNR DECIMAL ( 6 , 0 ) ;
DECLARE C1 CURSOR FOR
SELECT PHSHIP
FROM THEPRDDTA . WSHP010
WHERE PHORD = ORDNR AND
PHID = 'PH' ;
OPEN C1 ;
FETCH FROM C1 INTO SHIPMENTNR ;
CLOSE C1 ;
IF ( SHIPMENTNR IS NULL ) THEN
//do something
END IF ;
BEGIN
DECLARE C_OUT CURSOR FOR
SELECT DATA
FROM BPCSF . ZPAL01
WHERE PKEY = 'THETSHIP' ;
OPEN C_OUT ;
END ;
END
这工作完美,并返回我选择的'DATA'。所以代码是工作的(好吧,if语句还没有测试,但这取决于我:)所以我没有把它括起来),我不想把它作为一个参数。
那么问题是:我如何将十进制'SHIPMENTNR'作为结果集返回给我的应用程序?就我个人而言,我将使用函数(UDF)
,而不是使用返回一行只有一列的结果集的存储过程。CREATE OR REPLACE GET_SHIPMENT_NUMBER(
ORDNR INTEGER
) RETURNS DECIMAL(6, 0)
BEGIN
DECLARE SHIPMENTNR DECIMAL(6, 0) ;
SET SHIPMENTNR = (
SELECT PHSHIP
FROM THEPRDDTA.WSHP010
WHERE PHORD = ORDNR AND
PHID = 'PH');
IF (SHIPMENTNR IS NULL) THEN
//do something
END IF ;
RETURN SHIPMENTNR;
END
为了返回一个打开的游标,您需要使用选项'with return'定义游标,并将其定义为调用者或客户端。
您还可以使用"动态结果集X"限制返回的结果集
CREATE OR REPLACE PROCEDURE GET_SHIPMENT_NUMBER(
ORDNR INTEGER
)
DYNAMIC RESULT SETS 1
BEGIN
DECLARE SHIPMENTNR DECIMAL(6, 0) ;
DECLARE C_OUT CURSOR
WITH RETURN TO CALLER
FOR
SELECT DATA
FROM BPCSF.ZPAL01
WHERE PKEY = 'THETSHIP' ;
SET SHIPMENTNR = (
SELECT PHSHIP
FROM THEPRDDTA.WSHP010
WHERE PHORD = ORDNR AND
PHID = 'PH');
IF (SHIPMENTNR IS NULL) THEN
//do something
END IF ;
OPEN C_OUT ;
END
引用:
- 声明游标:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0000937.html
- 创建过程:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0008329.html