首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行存储过程时节点-oracledb错误

执行存储过程时节点-oracledb错误
EN

Stack Overflow用户
提问于 2018-11-26 12:14:54
回答 2查看 834关注 0票数 0

我使用Node 10.x和Oracledb 3.0

我试图在node.js中执行一个存储过程

过程中有异常块,如下所示:

代码语言:javascript
复制
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

有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-30 00:04:47

即使不打算在节点-oracledb代码中使用这些变量,也必须将所有OUT变量设置为某个变量,请参阅https://github.com/oracle/node-oracledb/issues/886

事实证明,在所有基于Oracle的C 'OCI‘API的Oracle DB驱动程序(例如节点-oracledb)中,这是正确的,但在节点oracledb中更常见的是症状性问题。

票数 1
EN

Stack Overflow用户

发布于 2021-04-01 15:07:12

一个解决办法是,如果在此之前还没有打开OUT_MENU_NAME游标,则打开异常块中的零行游标:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53480926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档