PHP/PDO 在 json 中调用带有输出 CLOB 的过程

PHP/PDO Call procedure with output CLOB in json

当我在 PHP 中使用 PDO 驱动程序调用存储过程时,如何从我的存储过程中获得输出 CLOB?

程序在Oracle中是这样定义的:

PROCEDURE COPI_SCHE(P_ID    IN   LOCT_SCHE.ID%TYPE,
                     P_SCHE  OUT  CLOB) 

其中 LOCT_SCHE.ID%TYPE 是 NUMBER (10)

如果我用 TOAD 调用它,它会起作用:


    DECLARE
    test CLOB;
    BEGIN
    LOC_SH.COPI_SCHE(884, TEST);
    dbms_output.put_line(test);
    END

;

输出结果:

{ "ID" : "915", "FK_RA_NO_PERM" : "1234567", "TYPE_SCHE" : "PLP", "DESC_SCHE" : "test 4", "AN" : "", "TIMB_MAJ" : "15-04-10", "USAG_MAJ" : "USER" }

所以,在 PHP 中,我尝试这样做:


    $connection = $this->getConnection();
    $idGrouping = 884;
    $sql = "CALL LOC_SH.COPI_SCHE(?,?)";        
    $statement = $connection->prepare($sql);
    $statement->bindParam(1, $idGrouping, PDO::PARAM_INT);
    $statement->bindParam(2, $result, PDO::PARAM_LOB);
    $statement->execute();

但是 Oracle 抛出:

ORA-06553: PLS-306: wrong number or types of arguments in call to 'COPI_SCHE'

怎么了?

我尝试了很多与 PDO::PARAM_LOB|PDO::PARAM_INPUT_OUTPUT 的关联,但没有任何效果。

感谢您的帮助。

终于自己搞定了。

我不知道为什么 PDO::PARAM_LOB 在这种情况下不起作用。

解决方案是这样使用PDO::PARAM_STR:

$statement->bindParam(2, $result, PDO::PARAM_STR, 2048);