Как создать представление, используя динамическое действие в оракуле APEX? - PullRequest
0 голосов
/ 29 мая 2018

Я создал процедуру для динамического создания представления с использованием элемента челнока в 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 ]

0 голосов
/ 30 мая 2018

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

apex_string.split( :P12_EMPLOYEES, ':' )

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

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

0 голосов
/ 29 мая 2018

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

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

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

...