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

PHP&;Oracle-通过php将布尔值绑定到Oracle函数调用失败,php,oracle,plsql,boolean,oracle-call-interface,Php,Oracle,Plsql,Boolean,Oracle Call Interface,我有一个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”,当使用变量将值绑定

我有一个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:调用中参数的数量或类型错误 “INTERNINSERTDATA”


似乎我没有以正确的方式绑定布尔值。绑定到其他数值参数是有效的。只有布尔值没有。我遗漏了什么?

似乎不可能像swstephe在评论中所说的那样,使用少于Oracle 12c的数据绑定布尔数据

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

$sql=“BEGIN:result:=PRO_1.PKG_regelement.internInsertData(28236653,1,1, 是的,12342741);结束;“


如果您能够使用Oracle 12c或更高版本,也可以使用SQLT_BOL。

正如swstephe在评论中所说,似乎不可能使用低于Oracle 12c的版本绑定布尔数据

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

$sql=“BEGIN:result:=PRO_1.PKG_regelement.internInsertData(28236653,1,1, 是的,12342741);结束;“


或者,如果您能够使用Oracle 12c或更高版本,请使用SQLT\u BOL。

尝试按名称将最后一个参数添加到oci\u bind\u。对于布尔值,需要使用常量SQLT_BOL。默认情况下,它将所有内容转换为SQLT_CHR。另外,请注意,这只适用于Oracle 12c。我对SQLT类型有了新的了解,但在PHP文档中找不到任何表示布尔值的内容……好吧,我忽略了这一点。遗憾的是,我使用的是Oracle 11,所以我想我必须内联传递它……只需转换为一个数字,0=false,1=true。请尝试按名称将最后一个参数添加到oci_bind_。对于布尔值,需要使用常量SQLT_BOL。默认情况下,它将所有内容转换为SQLT_CHR。另外,请注意,这只适用于Oracle 12c。我对SQLT类型有了新的了解,但在PHP文档中找不到任何表示布尔值的内容……好吧,我忽略了这一点。遗憾的是,我使用的是Oracle 11,所以我想我必须内联传递它……只需转换为一个数字,0=false,1=true。