Как создать представление, используя динамическое действие в оракуле APEX?

Я создал процедуру для динамического создания представления, используя элемент челнока в APEX, который возвращает значения, разделенные двоеточиями. Вот код для его создания.

create or replace procedure create_temporary_view (input_employees in varchar2) is
begin
execute immediate 'create or replace view temp_batch_id as with emps(shuttle_item) as 
(select '''||input_employees||''' from dual)
select regexp_substr(shuttle_item, ''[^:]+'', 1, level) batch_id from emps connect by level <= regexp_count(shuttle_item, '':'') + 1;';
commit;
end;

И внутри динамического действия Выполнить код PL/SQL я добавил код, похожий на

begin
create_temporary_view(:P12_EMPLOYEES);
end;

где:P12_EMPLOYEES - элемент челнока, дающий значения, разделенные двоеточиями. Очевидно, этот фрагмент кода работает, когда я делаю это на вкладке "Команды SQL" в Oracle APEX, но процедура не вызывается из-за динамического действия кода EXECUTE PL/SQL. Есть ли конкретная причина для этого? Если да, что это? Если нет, какие могут быть возможные ошибки? Заранее спасибо.

2 ответа

Я не уверен, какова ваша конечная цель, но я бы не стал создавать такие таблицы или представления из APEX.

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

Посмотрите, как создать / заполнить коллекцию в APEX, и я думаю, вы найдете то, что пытаетесь сделать.

Похоже, вы пытаетесь токенизировать свой P12_EMPLOYEES переменная. Это не правильный способ сделать это. Apex имеет встроенную функцию PL/SQL для этого:

apex_string.split( :P12_EMPLOYEES, ':' )

это даст вам apex_t_varchar2 коллекция, разделенная двоеточиями.

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

Другие вопросы по тегам