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

问题描述 投票:-2回答:1

我正在尝试在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
sql db2 db2-luw
1个回答
0
投票

你的“方法1”是无效的语法,Db2会拒绝它,因为那是设计。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.