如何使用 IntelliJ/DataGrip 调用带有 OUT 参数的 DB2 存储过程?

How can I call a DB2 stored procedure with OUT params using IntelliJ/DataGrip?

程序定义:

CREATE OR REPLACE PROCEDURE MY_PROC (
   OUT @STATUS      INTEGER,
   IN  @STARTCODE   NUMERIC(8),
   IN  @DRIVER      VARCHAR(20)   DEFAULT NULL,
   IN  @UNIT        VARCHAR(20)   DEFAULT NULL,
   IN  @TRAILER     VARCHAR(20)   DEFAULT NULL,
   IN  @ORDERNUM    VARCHAR(10)   DEFAULT NULL,
   IN  @USERID      VARCHAR(10)   DEFAULT NULL,
   IN  @DRIVER2     VARCHAR(20)   DEFAULT NULL
)

我把这个 SQL 放到 IDE:

CALL LIB.ADD_DUTLINK ( ?, 99612, '0520', '101', 'TRL1', '13573333', 'A', '0085' );

我看到这个屏幕,但我不知道这意味着什么。

我已经尝试了设置 -> 数据库 -> 用户参数下的所有复选框排列。

与其他 GUI 数据库工具相比,DataGrip 版本 2019.2.5 似乎以更具敌意的方式处理存储过程输出参数。

幸运的是,有许多可供选择的免费工具,例如 IBM Data Studio、DBeaver、DB-Visualizer、Squirrel-SQL 等,其中一些对 Db2 更友好。

对于您在问题中显示的屏幕,它将(错误地)禁用 'Execute' 按钮,除非您为指示的参数输入一个值,然后按 Enter 键。这似乎是不受欢迎的默认行为。

我希望 DataGrip 能够识别定义为 "OUT" 的存储过程参数不需要任何初始化,因此在启用“执行”按钮之前不应显示等待值的对话框屏幕(如果没有其他 OUT 或 INOUT 参数)。

我注意到如果你替换“?” output-parameter indicator by a variable with a suitable datatype,那么存储过程将执行并且不会显示您在问题中显示的对话框屏幕。例如:

create or replace variable p_stat integer;

CALL LIB.ADD_DUTLINK ( p_stat, 99612, '0520', '101', 'TRL1', '13573333', 'A', '0085' );

也许您应该在 DataGrip 论坛上提出问题 https://intellij-support.jetbrains.com/hc/en-us/community/topics/200381555-DataGrip

用户参数设置不包括这种情况,因为它是 OUT 参数而不是 user 参数。所以,现在唯一的选择就是自己写代码。请发表评论并投票。

https://youtrack.jetbrains.com/issue/DG-5865