DB2 - 多结果集存储过程
DB2 - Multiple Result-Set Stored Procedure
所以首先 - 我不确定我的问题是出在我的 DB2 代码上,还是出在我对 DBeaver 的设置上。
我在 运行 宁以下代码时遇到问题,DBeaver 中只显示一个结果集。我的意图是创建一个将 return 的 2 个结果集设置为 UI 的过程。这样做的目的是让我可以一次 运行 多个脚本,然后将所有结果集放在同一位置。除了 DBeaver,我没有任何其他软件,所以我无法在任何其他管理工作室上准确测试它。
我这样做是为了在我不在办公室时,其他人可以轻松地 运行 我的查询。如果需要任何其他信息/您有任何疑问,请告诉我。 Table/column 问题的名字已经编好。
CREATE PROCEDURE dbo.procedure_name (IN start_date date, IN end_date date)
DYNAMIC RESULT SETS 2
BEGIN
DECLARE C1 CURSOR WITH RETURN TO CALLER FOR
SELECT
d.Student_NUM AS student_number,
c.Teacher_NUM AS teacher_number,
FROM dbo.c AS teachers
INNER JOIN dbo.d AS student ON c.class_num= d.class_num;
WHERE d.entry_date >= start_date and d.graduation_date < end_date
DECLARE C2 CURSOR WITH RETURN TO CALLER FOR
SELECT
c.birth_date AS teacher_birth_date,
FROM dbo.c AS teachers;
OPEN C2;
OPEN C1;
END
我只得到 C2
的结果
如果我切换 OPEN
的顺序,我只会得到 C1
。它似乎只是 return 第一个 OPEN
游标。
更新
这就是存储过程的调用方式,也是我看到的 return 集。 注意:return 集的名称显示为 C
,我知道我应该期待 Result
和 Result-2
。 (抱歉进行了大量编辑)
DBeaver 版本:5.2.5
DB2 版本:9.5 修复包 5
OS: Windows
通过更改 dbeaver 配置的 ballbreaker 解决。
仅当您的数据库连接使用名为 "DB2 LUW 8.x" 的 dbeaver 随附的 "old" 驱动程序时才会出现此症状。该驱动程序不会随当前的 dbeaver 版本自动安装(但可以手动下载),因为默认情况下会随当前的 dbeaver 版本安装更新的驱动程序。
如果您的数据库连接使用名为 "DB2 LUW" 的驱动程序(与 "DB2 LUW 8.x" 不同),那么您将不会遇到此症状。
如果您的连接使用旧驱动程序 (DB2 LUW 8.x),那么在数据库的连接属性下,有一个 "Edit Driver Settings" -> Adv。参数 -> "Driver supports multiple results" 。对于旧驱动程序,默认情况下禁用此设置,这导致了该症状。使用较新的驱动程序,没有这样的设置。
正如@mao 和@ballBreaker 所说,为了清楚起见,必须遵循后续步骤。
"Edit Connection" 上的正确点击。
转到 "Connection settings" 部分并单击 "Edit Driver Settings" -> 高级。参数 -> "Driver supports multiple results".
所以首先 - 我不确定我的问题是出在我的 DB2 代码上,还是出在我对 DBeaver 的设置上。
我在 运行 宁以下代码时遇到问题,DBeaver 中只显示一个结果集。我的意图是创建一个将 return 的 2 个结果集设置为 UI 的过程。这样做的目的是让我可以一次 运行 多个脚本,然后将所有结果集放在同一位置。除了 DBeaver,我没有任何其他软件,所以我无法在任何其他管理工作室上准确测试它。
我这样做是为了在我不在办公室时,其他人可以轻松地 运行 我的查询。如果需要任何其他信息/您有任何疑问,请告诉我。 Table/column 问题的名字已经编好。
CREATE PROCEDURE dbo.procedure_name (IN start_date date, IN end_date date)
DYNAMIC RESULT SETS 2
BEGIN
DECLARE C1 CURSOR WITH RETURN TO CALLER FOR
SELECT
d.Student_NUM AS student_number,
c.Teacher_NUM AS teacher_number,
FROM dbo.c AS teachers
INNER JOIN dbo.d AS student ON c.class_num= d.class_num;
WHERE d.entry_date >= start_date and d.graduation_date < end_date
DECLARE C2 CURSOR WITH RETURN TO CALLER FOR
SELECT
c.birth_date AS teacher_birth_date,
FROM dbo.c AS teachers;
OPEN C2;
OPEN C1;
END
我只得到 C2
如果我切换 OPEN
的顺序,我只会得到 C1
。它似乎只是 return 第一个 OPEN
游标。
更新
这就是存储过程的调用方式,也是我看到的 return 集。 注意:return 集的名称显示为 C
,我知道我应该期待 Result
和 Result-2
。 (抱歉进行了大量编辑)
DBeaver 版本:5.2.5
DB2 版本:9.5 修复包 5
OS: Windows
通过更改 dbeaver 配置的 ballbreaker 解决。
仅当您的数据库连接使用名为 "DB2 LUW 8.x" 的 dbeaver 随附的 "old" 驱动程序时才会出现此症状。该驱动程序不会随当前的 dbeaver 版本自动安装(但可以手动下载),因为默认情况下会随当前的 dbeaver 版本安装更新的驱动程序。
如果您的数据库连接使用名为 "DB2 LUW" 的驱动程序(与 "DB2 LUW 8.x" 不同),那么您将不会遇到此症状。
如果您的连接使用旧驱动程序 (DB2 LUW 8.x),那么在数据库的连接属性下,有一个 "Edit Driver Settings" -> Adv。参数 -> "Driver supports multiple results" 。对于旧驱动程序,默认情况下禁用此设置,这导致了该症状。使用较新的驱动程序,没有这样的设置。
正如@mao 和@ballBreaker 所说,为了清楚起见,必须遵循后续步骤。
"Edit Connection" 上的正确点击。
转到 "Connection settings" 部分并单击 "Edit Driver Settings" -> 高级。参数 -> "Driver supports multiple results".