我正在尝试在DB2-LUWv10.5中创建一个存储过程。我需要不使用Cursor(WITH RETURN)返回表的结果集。
我正在DB2-LUWv10.5上运行以下代码。当我使用Approach2时,它运行良好并返回预期结果集作为输出,即所有员工的薪水和奖金。但是,当我使用Approach1时,它给了我一个错误。
遇到错误:
方法1:
CREATE PROCEDURE read_emp()
SPECIFIC read_emp
LANGUAGE SQL
DYNAMIC RESULT SETS 1
p1: BEGIN
SELECT salary, bonus
FROM employee;
END p1
方法2:
CREATE PROCEDURE read_emp()
SPECIFIC read_emp
LANGUAGE SQL
DYNAMIC RESULT SETS 1
p1: BEGIN
DECLARE c_emp CURSOR WITH RETURN FOR
SELECT salary, bonus
FROM employee;
OPEN c_emp;
END p1
预期的输出-
Salary Bonus
25000 2500
30000 3000
50000 5000
40000 4000
45000 4500
答案 0 :(得分:0)
您的“方法1”是无效的语法,Db2将拒绝它,因为这是设计。
想要通过dynamic result set
语法返回结果集的存储过程,必须声明并打开至少一个游标。
但是存储过程不一定必须使用动态结果集语法。存储过程可以自由使用OUTPUT参数,该参数可以是弱类型的游标或强类型的游标数据类型。但是,存储过程仍然必须打开游标,只是它可以将打开的游标作为参数传递回去。但是,调用方仍然需要使用该游标。
用户定义的函数可以返回表,这是一种替代方法,因此调用方不需要使用显式游标来访问结果数据。