Если все, что вы хотите сделать, это вставить в таблицу, основанную на операторе select, тогда PL / SQL не нужен (под этим я подразумеваю, что нет необходимости открывать курсор, извлекать строку, обрабатывать строку и затем переходите к следующему ряду) - это строка за строкой или медленная обработка.
Вместо этого вы можете сделать все это в одном операторе вставки, например ::10000
INSERT INTO mof_outaccdtl_rec (<column being inserted into>) -- please always list the columns being inserted into; this avoids issues with your code when someone adds a column to the table.
SELECT entry_comments || ' ' || description -- please alias your columns! How do we know which table each column came from?
FROM table1 a
inner join table2 b on a.id_justific = b.id_justific;
Если вы хотите встроить этот оператор вставки в PL / SQL, все, что вам нужно сделать, это добавить начало / конец вокруг него, например:
begin
INSERT INTO mof_outaccdtl_rec (<column being inserted into>) -- please always list the columns being inserted into; this avoids issues with your code when someone adds a column to the table.
SELECT entry_comments || ' ' || description -- please alias your columns! How do we know which table each column came from?
FROM table1 a
inner join table2 b on a.id_justific = b.id_justific;
end;
/
Это предпочтительное решение при работе с базами данных - думать в наборах (где это возможно), а не процедурно (построчно). Его легче поддерживать, код проще читать и писать, и он будет более производительным, поскольку вам не придется переключаться между PL / SQL и SQL несколько раз с каждой строкой.
Переключение контекста отрицательно сказывается на производительности, если рассматривать ванну, наполненную водой, - быстрее ли опустошать ванну ложкой (построчная обработка) с кувшином (ряды - ряды - ряды) ) или потянув за вилку (на основе набора)?