Я пытаюсь понять, почему оператор 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
Я не ожидал, что в обоих случаях произойдет аннулированиеодин из случаев.Я что-то не так делаю?