В Oracle БД есть коллекция вида:
TYPE error_list_t IS TABLE OF SYS.ODCIVarchar2List INDEX BY varchar2(30)
Наполняется она в процедуре:
procedure set(name varchar2, value varchar2)
error_list error_list_t;
begin
if not error_list.exists(name) then
error_list(name) := SYS.ODCIVarchar2List();
end if;
error_list(name).extend;
error_list(name)(error_list(name).count) := value;
end set;
Необходимо из PHP получить данную коллекцию, очень важно сохранить ключ name
.
Так же, в проекте используется ORM Doctrine2. Если есть возможность использовать и её, то было бы просто идеально.
В документации функции oci_bind_array_by_name о подстановке массивов, ни двухмерных, ни ассоциативных с символным ключом, не упомянается. Значит получить такой массив как параметр или значение возврата не получится.
Самое простое решение, получить данный массив как ResultSet обычного запроса. Надо будет добавить конвейерную функцию и соответствуюий ей тип данных. Вот рабочий пример:
create or replace package pkg as
type errorListT is table of SYS.ODCIVarchar2List index by varchar2 (30);
type errorT is record (name varchar2(30), value varchar(32767));
type errorsT is table of errorT;
function getErrorList return errorsT pipelined;
end;
/
create or replace package body pkg as
-- это тестовые данные заменяющие результат процедуры set() в вопросе
errors errorListT := errorListT (
'name1'=>sys.ODCIVarchar2List ('error text 11','error text 12'),
'name2'=>sys.ODCIVarchar2List ('error text 21','error text 22'));
function getErrorList return errorsT pipelined is
name varchar2 (30) := errors.first;
begin
while name is not null loop
for ix in 1..errors(name).count loop
pipe row (errorT (name, errors(name)(ix)));
end loop;
name := errors.next(name);
end loop;
return;
end;
end;
/
Вызов и результат будут выглядеть так:
select * from table (pkg.getErrorList ()) order by name
/
NAME VALUE
-------- ----------------
name1 error text 11
name1 error text 12
name2 error text 21
name2 error text 22
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах
Поделитесь, пожалуйста, опытом как сделать церковный календарь? Чтобы на каждый день снизу высвечивалась строка с именами святыхСам календарь...
Генерирую пароль на сервере в зависимости от даты и id Юзеры повадились откатывать дату на предыдущую и пользовать не генеря новый пароль!...