【问题标题】:DB2 - Multiple Result-Set Stored ProcedureDB2 - 多结果集存储过程
【发布时间】:2018-12-04 20:43:10
【问题描述】:

首先,我不确定我的问题是出在我的 DB2 代码上,还是出在我在 DBeaver 上的设置上。

我在运行以下代码时遇到问题,DBeaver 中只显示一个结果集。我的目的是创建一个向 UI 返回 2 个结果集的过程。这样做的目的是让我可以一次运行多个脚本,然后将所有结果集放在同一个位置。除了 DBeaver 之外,我没有任何其他软件,因此我无法在任何其他管理工作室上对其进行完全测试。

我这样做是为了如果我不在办公室,其他人可以轻松地运行我的查询。如果需要任何其他信息/您有任何问题,请告诉我。表/列名已为该问题编造。

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。它似乎只返回第一个 OPEN 光标。

更新

这就是存储过程的调用方式,以及我看到的返回集。 注意:返回集的名称显示为C,我知道我应该期待ResultResult-2。 (对不起,重删)

DBeaver 版本:5.2.5

DB2 版本:9.5 Fix Pack 5

操作系统:Windows

【问题讨论】:

  • SQL-PL 存储过程中的多个结果集在 Linux 上使用 Dbeaver 5.1.2 和 Db2 v11.1 对我来说可以正常工作。每个结果集都出现在 GUI 中自己不同的选项卡中,默认选项卡名称为“Results”和“Results-2”。所以结果集也不会显示在同一个选项卡上,以防万一这是您的期望。
  • 这不是我的期望。看起来我正在使用 5.0.1 版本,我会尝试更新到最新版本,看看我得到了什么。
  • @mao 你是用exec 还是call 调用程序?似乎我的返回集没有与“Results”和“Results-2”类似地返回,而是使用 C2 的表名
  • 在 Db2-LUW 中为动态 SQL 调用存储过程的唯一方法是使用 CALL,这就是我在 dbeaver 中使用的方法。任何其他方法都是特定于 dbeaver 的,并且不是 Db2 原生的。
  • 我发现了我的问题.... :\ 在数据库的连接属性下,有一个“编辑驱动程序设置”-> Adv。参数->“驱动程序支持多个结果”..默认情况下禁用该设置。感谢@mao 的所有帮助。如果您想要一些代表,请随时将此作为答案发布,我会接受。

标签: sql db2 dbeaver


【解决方案1】:

由具有 dbeaver 配置更改的 ballbreaker 解决。

只有当您的数据库连接使用 dbeaver 提供的名为“DB2 LUW 8.x”的“旧”驱动程序时,才会出现此症状。该驱动程序不会随当前 dbeaver 版本自动安装(但可以手动下载),因为默认情况下会随当前 dbeaver 版本安装更新的驱动程序。

如果您的数据库连接使用名为“DB2 LUW”的驱动程序(不同于“DB2 LUW 8.x”),那么您将不会遇到这种症状。

如果您的连接使用旧驱动程序(DB2 LUW 8.x),那么在数据库的连接属性下,有一个“编辑驱动程序设置”-> Adv。参数->“驱动程序支持多个结果”。对于旧驱动程序,默认情况下禁用此设置,从而导致症状。使用较新的驱动程序,没有这样的设置。

【讨论】:

  • 供参考的驱动程序是“DB2 LUW 8.x”,描述为“DB2 LUW driver for old DB2 versions (8.x)”
  • 谢谢!是的,在这个特定的环境下,驱动程序是手动安装的,以连接到我们真正的旧数据库(大声笑)。希望没有人有同样的问题,但至少如果他们有,这就是答案!
【解决方案2】:

为了清楚起见,正如@mao 和@ballBreaker 所说,必须遵循接下来的步骤。

右键单击“编辑连接”。

转到“连接设置”部分并单击“编辑驱动程序设置”-> Adv. parameters -> "驱动支持多个结果"。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2014-01-24
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2019-08-24
    相关资源
    最近更新 更多