Будет ли Merge Into table_x всегда делать недействительным пакет или SP при добавлении нового столбца в table_x? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь понять, почему оператор MERGE INTO table_x (Oracle 12c) сделает недействительным мой пакет или хранимую процедуру при изменении table_x и добавлении нового столбца.Я делаю что-то неправильно?Я не ожидал, что аннулирование произойдет.

Например, вот таблица_x:

CREATE TABLE table_x 
( 
       ID number
       ,column_1 VARCHAR2(50)
)

У нас есть следующие SP с различными способами написания предложения MERGE INTO:

CREATE OR REPLACE PROCEDURE pr_test1 IS
BEGIN
   MERGE INTO table_x x
   USING .... /*the rest of the clauses are the same in both SP, only Merge into is different*/
   ON ....
   WHEN NOT MATCHED THEN ...
   WHEN MATCHED THEN ...;

END pr_test1;

AND

CREATE OR REPLACE PROCEDURE pr_test2 IS
BEGIN
   MERGE INTO (SELECT id
                 FROM table_x) x
   USING ....
   ON ....
   WHEN NOT MATCHED THEN ...
   WHEN MATCHED THEN ...;
END pr_test2;

При добавлении столбца в table_x:

alter table table_x add column_2 varchar2(100);

Я получаю

select object_name, status from dba_objects;

pr_test1 INVALID
pr_test2 VALID

Я не ожидал, что в обоих случаях произойдет аннулированиеодин из случаев.Я что-то не так делаю?

1 Ответ

1 голос
/ 16 апреля 2019

Не MERGE делает процедуру недействительной, а ALTER TABLE.Вот как это происходит;Итак, перекомпилируйте пакет.

...