我有一个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'
似乎我没有以正确的方式绑定布尔值。绑定到其他数字参数有效。只有布尔值没有。我错过了什么?
答案 0 :(得分:0)
似乎不可能使用少于Oracle 12c来绑定布尔数据,就像swstephe在他的评论中所说的那样。
您必须传递内联值,如下所示:
$ sql =“BEGIN:result:= PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1, 的真下,123,42741); END;“;
如果您能够使用Oracle 12c或更高版本,请使用SQLT_BOL。