Здравствуйте. Я пытаюсь передать переменные из PHP в Oracle.Я использую OCI8 и ранее работал с массивами в качестве аргументов в хранимых процедурах, и при компиляции создаются типы этих массивов.Поэтому, создавая экземпляр коллекции на стороне PHP, мы можем напрямую упомянуть имя коллекции.
Пример:
$my_coll = oci_new_collection($c, 'MY_ARRAY');
где MY_ARRAY будет типом массива, который я объявил в экземпляре Oracle.
create or replace type MY_ARRAY as varray(100) of varchar2(20);
Поэтому, когда я создаю их вне пакета, тип компилируется и будет готов во время выполнения.
Если я сделаю это из пакетов, я получаю сообщение об ошибке
Предупреждение PHP: oci_new_collection () [function.oci-new-collection]: OCI-22303: тип "". "My_pack.my_array_type" не найден
Заголовок моего пакетабудет выглядеть так
create or replace
PACKAGE my_pack
AS
TYPE my_array_type is VARRAY(200) of varchar2(20);
my_arr my_array_type;
function my_func(
in_id number,
in_arr my_array_type
)
return number;
end my_pack;
Теперь, когда я звоню из PHP, чтобы создать экземпляр коллекции, я делаю это так
$my_collection = oci_new_collection($connect,'my_pack.my_array_type');
Теперь я получаю предупреждение типа ненайдено.
Мой вопрос: как мне вызвать тип varray, который находится в пакете ???Я делаю это как package.type_name, но получаю предупреждение о том, что type not found.