【问题标题】:How to concate join condition based on input flag value inside cursor in DB2如何根据 DB2 游标内的输入标志值连接连接条件
【发布时间】:2022-01-03 20:47:09
【问题描述】:

我有一个下面的 SP,它有需要重构 db2 查询的 sql 查询,在 db2 中我不知道如何将标志条件剩余查询连接到主查询。

CREATE PROCEDURE EMPLOYEE
(IN EMPID varchar(1000),
IN BFLAG char(3))
RESULT SETS 1
LANGUAGE SQL
P1: BEGIN
SET v_sql = 'select c.id,c.name from emp c'

IF BFLAG <> 'T' THEN
        SET v_sql = v_sql ||
            ' left outer join dept U
            where c.empid in (' || EMPID || ') ';
    ELSE
        SET v_sql = v_sql ||
            ' where c.empid in (' || EMPID || ') ';
END IF;

如何根据上述条件指定的标志值在 db2 中连接查询。

声明 c_id CURSOR WITH RETURN FOR select c.id,c.name from emp c;

【问题讨论】:

    标签: db2 db2-400


    【解决方案1】:

    错误太多。
    您应该研究必须如何构造compound-statement
    每个变量都必须声明。
    内部语句的顺序很重要:首先是变量声明,然后是语句,游标。 SQL-procedure-statements 仅在之后。
    如果BFLAG &lt;&gt; 'T' is true: left join without conditions,你会得到错误的动态语句。

    如果问题是如何在动态语句中使用游标,那么这里是一个例子:

    CREATE PROCEDURE TEST_DYNAMIC (IN P_REST varchar(1000))
    DYNAMIC RESULT SETS 1
    LANGUAGE SQL
    P1: BEGIN
        DECLARE v_sql VARCHAR (1000);
        DECLARE v_s STATEMENT;
        DECLARE v_c1 CURSOR WITH RETURN FOR v_s;
        
        SET v_sql = 'select ' || P_REST;
        PREPARE v_s FROM v_sql;
        OPEN v_c1;
    END
    @
    
    CALL TEST_DYNAMIC (' * FROM EMPLOYEE WHERE EMPNO IN (''000010'', ''000020'')')@
    

    如果没有,那么至少尝试编译没有错误的例程,并显示运行时错误/意外结果(如果有)...

    【讨论】:

    • 我想把上面的动态查询变成静态查询。我不想使用 sql 变量来设置 query.im 使用游标但在游标内我应该如何验证条件并加入查询是我的问题。???
    • 这个查询怎么可能是静态的,如果它根据传递的参数值使用不同的表集?这是不可能的。为什么要静态 sql 而不是动态的?
    • 我正在重构过程,动态查询需要更多的执行时间,问题是动态查询具有基于它的左连接否则右连接的标志值。如果我使用游标和临时表逻辑进行动态到静态查询。我将用户输入 ID 存储到临时表中,然后加入主查询。我试图创建不同的游标,一个游标在其中具有标记为真查询,另一个游标具有标记为假查询。我根据标志打开游标,但静态查询执行时间比动态查询要多。任何帮助或建议都会有所帮助!!!
    • 对不起,我不明白你在上面写了什么。请使用 CREATE TABLE 和 INSERT INTO 语句编辑您的问题,以获得一些可重现的示例。提供多个 CALL 语句以及每个此类 CALL 所需的结果。
    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2019-11-19
    相关资源
    最近更新 更多