从我的C#应用程序中我想从数据库中获取货件数量,如果记录不存在,那么我将创建它并返回新的货件数量。现在我在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”到我的应用程序?
答案 0 :(得分:0)
就个人而言,我将使用函数(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
答案 1 :(得分:0)
为了返回打开的光标,您需要使用选项'定义光标并返回'和来电者或客户。
您还可以使用"动态结果集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
参考文献: