Невозможно сгенерировать планы выполнения для блоков PL/SQL
, только для запросов.
План выполнения показывает, как декларативные команды (SQL
) выполняются под капотом, т.е. е. какие процедуры используются. Он преобразует декларативные конструкции (операции над множествами) в процедуры (вложенные циклы, хэш-соединения, сортировки и т. Д.).
PL/SQL
, будучи, как следует из названия, процедурным языком, определяет сам план выполнения - вложенные циклы в вашем случае.
Если вы хотите увидеть план выполнения внутреннего запроса, скопируйте его и введите EXPLAIN PLAN FOR …
Обратите внимание, что это может быть более эффективно переписано как:
BEGIN
FOR L IN
(
SELECT MIN(some_id) AS minid, MAX(some_id) AS maxid
FROM (
SELECT some_id, rownum AS rn
FROM (
SELECT some_id
FROM table1
ORDER BY
some_id
)
)
GROUP BY
TRUNC(rn / 1000)
)
LOOP
INSERT
INTO TABLE2 (FIRSTNAME, LASTNAME)
SELECT FNAME, LASTNAME
FROM table1
JOIN table2
ON table2.some_id = table1.some_id
WHERE table1.some_id BETWEEN l.minid AND l.maxid
V_CNT := V_CNT + 1;
IF (MOD(V_CNT, 1000)=0) THEN
COMMIT;
END IF;
END LOOP;
END;