我正在尝试使用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变量正确打印结果集吗?
谢谢你!
1条答案
按热度按时间jutyujz01#
我们已报告此问题here。要了解最新进展,请按照门票。