PHP & Oracle - 通过 php 将布尔值绑定到 oracle 函数调用失败

PHP & Oracle - Binding a boolean to an oracle function call via php fails

我有一个 oracle 函数,我正在尝试通过 php:

访问
FUNCTION internInsertData( RefId  IN NUMBER, nProjektId  IN NUMBER, nKeepMaster IN NUMBER, Position IN NUMBER,CheckPosition IN BOOLEAN, TeilanlageId IN NUMBER,  TAElementId IN NUMBER)

这个函数需要一个布尔参数"CheckPosition",这似乎在使用变量绑定一个值到它时会导致错误。

当我运行

$result="";
$sql ="BEGIN :result := PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1,true,123,42741); END;";

$stmt = oci_parse($this->oracle->getConnection(), $sql);

oci_bind_by_name($stmt, ":result", $result,12345);
oci_execute($stmt);

一切正常。

我想通过绑定传递值。

但是当我将布尔变量绑定到调用时,它无法执行:

    $booli = true;
    $result="";

    $sql ="BEGIN :result := PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1,:booli,123,42741); END;";
    $stmt = oci_parse($this->oracle->getConnection(), $sql);
    oci_bind_by_name($stmt, ":result", $result,12345);
    oci_bind_by_name($stmt, ":booli", $booli,12345);
    oci_execute($stmt);

这会导致警告并且 PL/SQL 脚本停止:

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

看来我没有以正确的方式绑定布尔值。绑定到其他数字参数有效。只有布尔值没有。我错过了什么?

似乎无法使用低于 Oracle 12c 的版本绑定布尔数据,就像 swstephe 在他的评论中所说的那样。

您必须传递内联值,如下所示:

$sql ="开始:结果:= PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1, ,123,42741);结束;";

或者如果您能够使用 Oracle 12c 或更高版本,则使用 SQLT_BOL。