【问题标题】:dynamic db2 query in stored procedure存储过程中的动态 db2 查询
【发布时间】:2013-02-12 14:38:31
【问题描述】:

您好,我有一个如下的存储过程,

Create  PROCEDURE my_car(
in diesel integer,
out milege integer)
P1: BEGIN

SET START_query = 'SELECT*';
SET FROM_CLAUSE = ' FROM car, diesel';
SET WHERE_CLAUSE = ' WHERE car.c1 = diesel.c2';

IF (diesel =0) THEN            
                SET WHERE_CLAUSE = +WHERE_CLAUSE+'AND car.diesel=0' ;
                ELSE
                SET WHERE_CLAUSE = +WHERE_CLAUSE+' AND car.diesel='+diesel ; 
               END IF;
END P1

但它的抛出错误如下。

DB2 SQL Error: SQLCODE=-402, SQLSTATE=42819, SQLERRMC=+, DRIVER=3.52.90

如果我们使用 ||而不是 + 即,

SET WHERE_CLAUSE = WHERE_CLAUSE || 'AND car.diesel=0' ;

那么它的抛出错误如下,

DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=||;FUNCTION, DRIVER=3.52.90

请帮忙。

【问题讨论】:

    标签: stored-procedures db2 string-concatenation


    【解决方案1】:

    在 DB2 中,|| 而不是 + 用于字符串连接。

    此外,柴油是一个字符串,您将其与零进行比较。如果您希望柴油为 0 或 1 值,则应将其类型设置为整数。如果它需要是一个字符串,你应该将它与'''0' 或任何有意义的东西进行比较。

    我不确定您所说的 +V_WHERE_CLAUSE+ 是什么意思,但您的代码应该如下所示:

    IF (diesel = '0') THEN            
        SET WHERE_CLAUSE = WHERE_CLAUSE || 'AND car.diesel=0';
    ELSE
        SET WHERE_CLAUSE = WHERE_CLAUSE || ' AND car.diesel=' || diesel; 
    END IF;
    

    或者也许只是这样:

    SET WHERE_CLAUSE = WHERE_CLAUSE || ' AND car.diesel=' || diesel; 
    

    【讨论】:

    • 嗨..谢谢你的建议丹..但我也试过这个..即使它不工作并得到如下错误..DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=||;FUNCTION, DRIVER=3.52.90
    • @A 程序员,您还必须在过程顶部定义变量,例如 DECLARE WHERE_CLAUSE CHAR(100);
    • 是的,是的.. 我确实声明了 dan.. 我在上面的代码中错过了,但它在我真正的 sp.. 中存在 :-( 但仍然无法清除
    • @AProgrammer,您应该在问题中发布您的完整 SP(或导致该错误的简化完整 SP)。否则将无法判断导致该错误的原因。
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2023-03-26
    • 2014-06-04
    • 2019-04-08
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多