Выполнить курсор Oracle с входными параметрами в PHP - PullRequest
0 голосов
/ 12 августа 2011

Мне трудно понять, как добавить данные в качестве ввода для курсора Oracle, отправляемого в хранимую процедуру пакета в PHP.

Я пытаюсь отправить 2 куска данных через курсор. Я подтвердил, что данные верны до отправки.

PHP код:

$finalpieces = explode('|',$lkeyarr[$i]); //0=unique id, 1=table
$conn = oci_connect($oracleUsername,$oraclePassword,$oracleService);
$stmt = OCIParse($conn,"BEGIN PROD.PKG_CORE_OBSERVER.StuckPages_Unlock(:cur_PageDetails); END;");
$cur = oci_new_cursor($conn);
OCIBindByName($stmt,':cur_PageDetails',$cur,-1,OCI_B_CURSOR);
ociexecute($stmt,OCI_DEFAULT);

Детали хранимой процедуры:

PROCEDURE StuckPages_Unlock
    (
      cur_PageDetails IN OUT SYS_REFCURSOR
    )

принимает опорный курсор, который включает 2 поля:

 ProcessID          NUMBER(2);
 PageUniqueID       NUMBER(10);

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 13 августа 2011

Курсор ссылки - это указатель на набор результатов.Мы не можем присваивать значения Ref Cursor, мы используем его с запросом:

open my_ref_cursor for
    select process_id, page_unique_id
    from some_table;

Итак, ваш подход неверен.Трудно быть уверенным в том, чего вы пытаетесь достичь, но я думаю, что вам нужна хранимая процедура, которая принимает два параметра, которые она использует для запроса таблицы и возврата курсора ref.Возможно, как-то так:

PROCEDURE StuckPages_Unlock
    (
      p_proc_id in some_table.process_id%type
      , p_page_id in some_table.page_unique_id_id%type
      , cur_PageDetails OUT SYS_REFCURSOR
    ) 
IS
    open PageDetails for
        select *
        from some_table
        where process_id = p_proc_id
        and page_unique_id = p_page_id;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...