NodeJs Oracledb可选Array作为IN绑定参数到oracle过程

时间:2016-11-17 20:04:16

标签: node.js node-oracle oracledb-npm oracledb

我正在尝试按照以下链接中提到的过程传递数组,但该数组应该是可选的。我在程序中使用forall进行批量插入。但是一些时间表也可以是空的,并且程序中的其他东西也应该成功执行。

https://github.com/oracle/node-oracledb/blob/master/doc/api.md#plsqlindexbybinds

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

有效,但如果我不想传递val,我会收到错误

我试过

connection.execute(
  "BEGIN mypkg.myinproc(:id, :vals); END;",
  [
    1234,
    { type: oracledb.NUMBER,
       dir: oracledb.BIND_IN,
       val: [1, 2, 23, 4, 10]
    }
  ],

  function (err) { . . . });

我收到以下错误消息

尝试传递null或未定义或不传递时:

val:[]
val: null
val: undefined

and not having val at all

尝试传递空数组时

PLS-00306: wrong number or types of arguments in call to 'INSERT_PROCEDURE'

我通过使用null

传递数组做了一些工作
NJS-039: empty array is not allowed for IN bind

并在执行FORALL之前从列表中删除空值。

这适用于临时但我真的想以正确的方式解决这个问题。

1 个答案:

答案 0 :(得分:1)

我会将此视为一个错误(或设计缺陷)并让某人看一下。 PHP OCI8 2.0和Node node-oracledb 1.11都禁止绑定空数组,但Python cx_Oracle则不允许。