如何在不使用游标的情况下在DB2-LUW中返回表的结果集?

时间:2019-03-28 07:51:39

标签: sql db2 db2-luw

我正在尝试在DB2-LUWv10.5中创建一个存储过程。我需要不使用Cursor(WITH RETURN)返回表的结果集。

我正在DB2-LUWv10.5上运行以下代码。当我使用Approach2时,它运行良好并返回预期结果集作为输出,即所有员工的薪水和奖金。但是,当我使用Approach1时,它给了我一个错误。

遇到错误:

  1. “,”代替了“;”。
  2. “薪水,奖金”似乎放错了位置。
  3. 在“ p1”之后到达文本结尾。

方法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

1 个答案:

答案 0 :(得分:0)

您的“方法1”是无效的语法,Db2将拒绝它,因为这是设计。

想要通过dynamic result set语法返回结果集的存储过程,必须声明并打开至少一个游标。

但是存储过程不一定必须使用动态结果集语法。存储过程可以自由使用OUTPUT参数,该参数可以是弱类型的游标或强类型的游标数据类型。但是,存储过程仍然必须打开游标,只是它可以将打开的游标作为参数传递回去。但是,调用方仍然需要使用该游标。

用户定义的函数可以返回表,这是一种替代方法,因此调用方不需要使用显式游标来访问结果数据。