Прежде всего, мне не понятно, почему вы используете динамический SQL, а не статический SQL.
IF sek_nr = 1
THEN
DELETE FROM w_contracts
WHERE user_id = currentUser;
END IF;
INSERT INTO w_contracts( <<list of columns>> )
VALUES( currentUser, sek_nr, sysdate, cont_id, proj_nr );
Далее, для меня не очевидно, почему вы потенциально делаете DELETE
, а затем INSERT
, если SEK_NR
равно 1. Вероятно, было бы более эффективным сделать UPDATE
в этом случае. И как только вы делаете UPDATE
и INSERT
, вы можете упростить это в один оператор MERGE
.
Далее, если вы используете DEFINE_ARRAY
метод в DBMS_SQL
, вы можете выполнять массовую выборку данных с вашего курсора. Конечно, не видя вашего определения курсора, я бы заподозрил, что он тоже использует динамический SQL без необходимости и что вы можете использовать гораздо более простой подход.