我有一个下面的SP,它有sql查询,需要重构db2查询,在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游标,返回FOR select c.id,c.name from emp;
发布于 2021-11-25 08:24:30
错误太多。
您应该研究compound-statement必须如何构造。
每个变量都必须声明。
语句的顺序很重要:首先是变量声明,然后是语句和游标。SQL-procedure-语句仅在之后使用。
如果BFLAG <> 'T' is true
:left join没有条件,你会得到错误的动态语句。
如果问题是如何在动态语句中使用游标,那么下面是一个示例:
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'')')@
如果不是,那么尝试编译至少没有错误的例程,并显示运行时错误/意外结果。
https://stackoverflow.com/questions/70113416
复制