Привет, я пытаюсь передать varrays из PHP в Oracle. Я использую OCI8 и ранее работал с varrays как аргументы в хранимых процедурах, а при компиляции создаются типы этих varrays. Поэтому, создавая экземпляр коллекции в конце PHP, мы можем напрямую указать имя коллекции.
Пример:
$my_coll = oci_new_collection($c, 'MY_ARRAY');
где MY_ARRAY будет типом varray, который был объявлен в экземпляре Oracle.
create or replace type MY_ARRAY as varray(100) of varchar2(20);
Поэтому, когда я создаю их вне пакета, тип компилируется и будет готов во время выполнения.
Если я сделаю это из пакетов, я вернусь к ошибке
PHP Warning: oci_new_collection () [function.oci-new-collection]: OCI-22303: type "". "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, но я получаю предупреждение о том, что тип не найден.