首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在DB2中根据游标内的输入标志值连接连接条件

如何在DB2中根据游标内的输入标志值连接连接条件
EN

Stack Overflow用户
提问于 2021-11-25 15:08:29
回答 1查看 53关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
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游标,返回FOR select c.id,c.name from emp;

EN

回答 1

Stack Overflow用户

发布于 2021-11-25 16:24:30

错误太多。

您应该研究compound-statement必须如何构造。

每个变量都必须声明。

语句的顺序很重要:首先是变量声明,然后是语句和游标。SQL-procedure-语句仅在之后使用。

如果BFLAG <> 'T' is true:left join没有条件,你会得到错误的动态语句。

如果问题是如何在动态语句中使用游标,那么下面是一个示例:

代码语言:javascript
代码运行次数:0
运行
复制
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'')')@

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70113416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档