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

时间:2015-08-21 15:25:55

标签: php oracle plsql boolean oci

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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