【问题标题】:node-oracledb error when executing a stored procedure执行存储过程时出现 node-oracledb 错误
【发布时间】:2019-04-28 02:05:30
【问题描述】:

我使用的是 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 参数并出现错误并且 CURSOR 已关闭。

这些是过程中的 OUT 参数类型。

OUT_STATUS OUT VARCHAR2, OUT_STATUS_DESC OUT VARCHAR2, OUT_MENU_NAME OUT SYS_REFCURSOR

可能是什么问题?

【问题讨论】:

    标签: node.js oracle node-oracledb


    【解决方案1】:

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

    事实证明,在所有基于 Oracle 的 C 'OCI' API 的 Oracle DB 驱动程序(例如 node-oracledb)中都是如此,但在 node-oracledb 中更常见的是症状问题。

    【讨论】:

    • @Christoper Jones,感谢您提供的信息。所以我对这个问题没有可用的修复程序吗?
    • 它在 Oracle 错误 22813401 中被跟踪,该错误仍处于打开状态。
    • @kashiviswanath 你问,“所以这个问题没有可用的修复程序,对吗?”只是想指出,虽然还没有修复,但 Chris 链接到的线程确实有一个解决方法。
    【解决方案2】:

    一种解决方法是,如果之前未打开过,则在异常块中打开带有零行的 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;
    

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多