尝试在Oracle中使用DataGrip打印REF CURSOR变量时出错,但在SQL*Plus中有效

pbwdgjma  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(227)

我正在尝试使用DataGrip作为SQL客户端在Oracle 19 c中执行存储过程。存储过程使用REFCURSOR输出参数返回结果集。奇怪的是,代码在Oracle SQL*Plus应用程序中执行时工作得非常好,但在DataGrip中运行时遇到错误。
我有以下存储过程:

CREATE OR REPLACE PROCEDURE transactionlists(
    p_customer_id IN customers.customer_id%TYPE DEFAULT NULL,
    p_transaction_type IN transactions.transactions_type%TYPE DEFAULT NULL,
    p_result OUT SYS_REFCURSOR
) IS
BEGIN
    OPEN p_result FOR
        SELECT t.transaction_id, t.transactions_date, t.transactions_type, t.amount,
               c.first_name, c.last_name, c.email, c.phone_number
        FROM transactions t
        JOIN customers c ON t.customer_id = c.customer_id
        WHERE (p_customer_id IS NULL OR c.customer_id = p_customer_id)
          AND (p_transaction_type IS NULL OR t.transactions_type = p_transaction_type);
END;

我正在尝试执行它,并使用DataGrip中的以下代码打印结果集:

VAR rc REFCURSOR;
EXEC transactionlists(p_result => :rc);
PRINT rc;

当我运行上面的代码时,参数弹出窗口打开并要求输入,但我不知道在参数中输入什么。我附上here屏幕截图。
但是,如果我在参数窗口中输入“rc”,然后运行此代码,我会得到以下错误:

ORA-00900: invalid SQL statement

但是,值得注意的是,当我在Oracle SQL*Plus应用程序中运行相同的代码时,它工作得非常好,我可以看到结果集。
我认为问题出在DataGrip中的PRINT语句上,但我不确定如何在DataGrip中正确检索和显示结果集。有人能帮助我理解如何使用DataGrip从Oracle中的REF CURSOR变量正确打印结果集吗?
谢谢你!

jutyujz0

jutyujz01#

我们已报告此问题here。要了解最新进展,请按照门票。

相关问题