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。
我有一个 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。