Могу ли я использовать «выполнить немедленный» для цикла? Мне нужно создать комбинации значений в pl/sql. Об этом я собираюсь назвать серию вложенной динамики для цикла.Выполнять немедленную петлю PL/SQL
Пример: колонка 1 имеют эти значения: A, B столбец 2 имеют эти значения: C, D, E
Я хотел бы генерировать эту комбинацию: AC/AD/AE/BC/BD/BE
Я имею в виду, чтобы получить это, как:
for i in 1..count.column1
for j in 1..count.column2
dbms_output.put_line(column1.value(i)||'-'||column1.value(j));
end loop;
end loop;
Благодаря я не знаю, число столбцов (переменной), Могу ли я использовать выполнить немедленное?
declare
sql_stmt varchar2(200);
begin
sql_stmt := 'for i in 1..count.column1 for j in 1..count.column2 dbms_output.put_line(column1.value(i)||'-'||column1.value(j)); end loop; end loop';
execute immediate sql_stmt;
end;
Но у меня есть ошибка ORA-06512. Как я могу это сделать? :)
Благодарим вас за предложение!
Не легко. 'execute instant' обрабатывает полные операторы SQL и PL/SQL-блоки, и они не обмениваются областью переменных с вызывающей процедурой. Вам нужно будет сгенерировать целое 'declare ... begin ... end;' block, передать в свои переменные связывания и передать результат в виде массива или курсора ref. Кроме того, генерация операторов в такой партии, как правило, сокращает кеш-память Oracle. –