我使用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中抛出以下错误。
错误: ORA-24338:语句句柄未执行
但是,如果我在db中使用相同的in参数执行过程,则会给出带有错误和游标的正确的输出参数。
这些是过程中的OUT参数类型。
OUT_STATUS OUT VARCHAR2, OUT_STATUS_DESC OUT VARCHAR2, OUT_MENU_NAME OUT SYS_REFCURSOR
有什么问题吗?
发布于 2018-11-30 00:04:47
即使不打算在节点-oracledb代码中使用这些变量,也必须将所有OUT变量设置为某个变量,请参阅https://github.com/oracle/node-oracledb/issues/886。
事实证明,在所有基于Oracle的C 'OCI‘API的Oracle DB驱动程序(例如节点-oracledb)中,这是正确的,但在节点oracledb中更常见的是症状性问题。
发布于 2021-04-01 15:07:12
一个解决办法是,如果在此之前还没有打开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;https://stackoverflow.com/questions/53480926
复制相似问题