У меня есть процедура в моей базе данных Oracle с массивом в качестве выходного параметра. В этой процедуре я помещаю все команды с их очками в массив.
create or replace package pck_tournament as type trranking is record ( position number , team VARCHAR2(20) , points number ); type taranking is table of trranking; procedure retrieve_ranking (oparray out taranking); end pck_tournament;
Но когда я пытаюсь вызвать эту процедуру с помощью PHP, я всегда получаю такую ошибку:
PLS-00306: неправильное количество или типы аргументов при вызове RETRIEVE_RANKING
Это часть моего PHP-кода:
$out_arr = array(); $stmt = oci_parse($conn, "BEGIN pck_tournament.retrieve_ranking(:taranking); END;"); oci_bind_array_by_name($stmt,":taranking", $out_arr, 10000, 10000, SQLT_CHR ); oci_execute($stmt);
Если я изменю параметр OUT на VARCHAR2 для тестирования, я смогу прочитать результат. Но я не могу заставить его работать, если это массив.
Итак, проблема должна заключаться в том, что я использую неверный тип аргумента для хранения моего параметра OUT?
Я просмотрел множество веб-сайтов, но до сих пор не знаю, как это сделать.
1 ответ
То, что у вас есть в oracle, - это не просто массив, это массив записей ... Так что стандартный массив в PHP не сможет справиться с этим.
В соответствии с приведенным ниже вопросом здесь, в разделе переполнения стека, вам необходимо сообщить PHP, как будет выглядеть тип.
PHP: привязка переменной к выходному параметру табличного типа
Поэтому используйте приведенное ниже (заменив свой тип и схему)
$table_output = oci_new_collection($conn,'some_table_type','schema');
В другом вопросе также есть ссылка на хороший ресурс для получения дополнительной информации об этом.
Как указано в @ MT0, вам также придется изменить способ определения типов. Вы можете просто изменить его на объект, как предлагается, или оставить как запись, но основным изменением будет перемещение объявления за пределы вашего пакета.
PHP не сможет их увидеть, если они определены только в пакете.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.