【问题标题】:PHP/PDO Call procedure with output CLOB in jsonPHP/PDO 调用程序,在 json 中输出 CLOB
【发布时间】:2015-04-10 17:58:40
【问题描述】:

当我在 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 调用它,它可以工作:

宣布 测试 CLOB; 开始 LOC_SH.COPI_SCHE(884, 测试); dbms_output.put_line(测试); 结尾 ;

输出结果:

{ “ID”:“915”,“FK_RA_NO_PERM”:“1234567”,“TYPE_SCHE”:“PLP”,“DESC_SCHE”:“测试 4”,“AN”:“”,“TIMB_MAJ”:“15 -04-10", "USAG_MAJ" : "用户" }

所以,在 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); $语句->执行();

但是甲骨文抛出:

ORA-06553:PLS-306:调用“COPI_SCHE”时参数的数量或类型错误

怎么了?

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

感谢您的帮助。

【问题讨论】:

  • 数据库中LOCT_SCHE.ID%TYPE的类型是什么?
  • LOCT_SCHE.ID%TYPE 是 NUMBER (10)

标签: php stored-procedures pdo phalcon clob


【解决方案1】:

终于自己搞定了。

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2022-11-15
    • 2018-08-20
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多