将DB2中的变量返回到结果集中

时间:2014-05-21 08:02:42

标签: c# sql db2

从我的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”到我的应用程序?

2 个答案:

答案 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 

参考文献: