执行存储过程时node-oracledb错误
node-oracledb error when executing a stored procedure
我正在使用 Node 10.x 和 Oracledb 3.0
我正在尝试在 node.js
中执行存储过程
我在程序中有异常块,如下所示:
EXCEPTION
WHEN NO_DATA_FOUND THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:='USER NOT MAPPED TO A GROUP';
WHEN OTHERS THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:=dbms_utility.format_error_backtrace;
每当控制转到 node.js 中抛出以下错误的异常块时。
Error: ORA-24338: statement handle not executed
但是,如果我使用相同的 IN 参数在 db 中执行程序,它会给出正确的 OUT 参数,但有错误并且 CURSOR 已关闭。
这些是过程中的 OUT 参数类型。
OUT_STATUS OUT VARCHAR2,
OUT_STATUS_DESC OUT VARCHAR2,
OUT_MENU_NAME OUT SYS_REFCURSOR
可能是什么问题?
即使您不打算在 node-oracledb 代码中使用它们,也必须将所有 OUT 变量设置为某些内容,请参阅 https://github.com/oracle/node-oracledb/issues/886
事实证明,所有基于 Oracle C 'OCI' API 的 Oracle DB 驱动程序(例如 node-oracledb)都是如此,但症状问题在 node-oracledb 中更常见。
一个解决方法是,如果之前没有打开它,那么在异常块中打开零行的 OUT_MENU_NAME
游标:
EXCEPTION
WHEN NO_DATA_FOUND THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:='USER NOT MAPPED TO A GROUP';
-- Replicate your normal cursor output and filter on something that will never be true:
OPEN OUT_MENU_NAME FOR
SELECT 'Nothing' AS col1,
DATE '1970-01-01' AS col2,
0 AS col3
FROM DUAL
WHERE 1 = 0;
WHEN OTHERS THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:=dbms_utility.format_error_backtrace;
-- Replicate your normal cursor output and filter on something that will never be true:
OPEN OUT_MENU_NAME FOR
SELECT 'Nothing' AS col1,
DATE '1970-01-01' AS col2,
0 AS col3
FROM DUAL
WHERE 1 = 0;
我正在使用 Node 10.x 和 Oracledb 3.0
我正在尝试在 node.js
中执行存储过程我在程序中有异常块,如下所示:
EXCEPTION
WHEN NO_DATA_FOUND THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:='USER NOT MAPPED TO A GROUP';
WHEN OTHERS THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:=dbms_utility.format_error_backtrace;
每当控制转到 node.js 中抛出以下错误的异常块时。
Error: ORA-24338: statement handle not executed
但是,如果我使用相同的 IN 参数在 db 中执行程序,它会给出正确的 OUT 参数,但有错误并且 CURSOR 已关闭。
这些是过程中的 OUT 参数类型。
OUT_STATUS OUT VARCHAR2,
OUT_STATUS_DESC OUT VARCHAR2,
OUT_MENU_NAME OUT SYS_REFCURSOR
可能是什么问题?
即使您不打算在 node-oracledb 代码中使用它们,也必须将所有 OUT 变量设置为某些内容,请参阅 https://github.com/oracle/node-oracledb/issues/886
事实证明,所有基于 Oracle C 'OCI' API 的 Oracle DB 驱动程序(例如 node-oracledb)都是如此,但症状问题在 node-oracledb 中更常见。
一个解决方法是,如果之前没有打开它,那么在异常块中打开零行的 OUT_MENU_NAME
游标:
EXCEPTION
WHEN NO_DATA_FOUND THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:='USER NOT MAPPED TO A GROUP';
-- Replicate your normal cursor output and filter on something that will never be true:
OPEN OUT_MENU_NAME FOR
SELECT 'Nothing' AS col1,
DATE '1970-01-01' AS col2,
0 AS col3
FROM DUAL
WHERE 1 = 0;
WHEN OTHERS THEN
OUT_STATUS:='FAILURE';
OUT_STATUS_DESC:=dbms_utility.format_error_backtrace;
-- Replicate your normal cursor output and filter on something that will never be true:
OPEN OUT_MENU_NAME FOR
SELECT 'Nothing' AS col1,
DATE '1970-01-01' AS col2,
0 AS col3
FROM DUAL
WHERE 1 = 0;