【问题标题】:DB2 Declare/Set Variable in Stored ProcedureDB2 在存储过程中声明/设置变量
【发布时间】:2012-06-20 23:02:43
【问题描述】:

我无法编译这个存储过程,我只想声明和设置一个将在过程中使用的变量。注意:shipNo 是唯一的传入参数,并且是 VARCHAR(32)。

P1: BEGIN
DECLARE @likeShipNo VARCHAR(32);
SET likeShipNo = '%' || shipNo || '%';

DECLARE cursor1 CURSOR WITH RETURN FOR
    SELECT ADV_SHIP_NOTICE_NO,
        VNDR_ID,
        LOC,
        CARR_CD,
        CARR_PRO_NO,
        BL_NO,
        SHIP_EQUIP_ID,
        TS_LOAD

        FROM TRITS

        WHERE ADV_SHIP_NOTICE_NO LIKE(@likeShipNo); 
OPEN cursor1;
END P1

【问题讨论】:

  • 神秘缩写的列名是什么?为什么不直接把它们拼出来?

标签: sql stored-procedures db2


【解决方案1】:

DB2 中的变量不需要像 MSSQL 中的 @ 。另外,当你返回一个游标时,你需要在begin之前加上一句RESULT SET 1,然后在你想返回的游标上加上WITH RETURN TO CLIENT。该过程应如下所示:

CREATE BEGIN MYSCHEMA.MYPROC (
    IN shipNo VARCHAR(30) )
BEGIN
    DECLARE likeShipNo VARCHAR(32);

    SET likeShipNo = '%' || shipNo || '%';

    DECLARE cursor1 CURSOR WITH RETURN TO CLIENT FOR
        SELECT
            ADV_SHIP_NOTICE_NO,
            VNDR_ID,
            LOC,
            CARR_CD,
            CARR_PRO_NO,
            BL_NO,
            SHIP_EQUIP_ID,
            TS_LOAD
        FROM
            TRITS
        WHERE
            ADV_SHIP_NOTICE_NO LIKE likeShipNo;
    OPEN cursor1;
END;

【讨论】:

  • 为了避免编译器警告,我不得不使用 CALLER 而不是 CLIENT。没有区别,仍然无法编译。
  • @Ted 我再次检查了 SP 并修复了一个小错误。请告诉我您是否已经实现了使用这种方式或您自己的方式进行编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2012-03-03
  • 2019-07-01
  • 2014-08-08
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多