PHP&;Oracle-通过php将布尔值绑定到Oracle函数调用失败
我有一个oracle函数,我正试图通过php访问该函数: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”,当使用变量将值绑定
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。