Процедура вызова PHP/PDO с выходным CLOB в json

Как я могу получить выходной CLOB из моей хранимой процедуры, когда я вызываю ее с помощью драйвера PDO в PHP?

Процедура определена следующим образом в Oracle:

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

Где LOCT_SCHE.ID%TYPE — ЧИСЛО (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, но ничего не работает.

Спасибо за помощь.


person Michael    schedule 10.04.2015    source источник
comment
Каков тип LOCT_SCHE.ID%TYPE в базе данных?   -  person Dzyann    schedule 10.04.2015
comment
LOCT_SCHE.ID%TYPE — ЧИСЛО (10)   -  person Michael    schedule 13.04.2015


Ответы (1)


В итоге получил сам.

Не знаю почему, но PDO::PARAM_LOB в этом случае не работает.

Решение состоит в том, чтобы использовать PDO::PARAM_STR следующим образом:

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

person Michael    schedule 14.04.2015