Tworzenie łącza do bazy danych w locie wydaje się czymś niezwykłym; Twój schemat powinien być statyczny i stabilny. Jednakże, jeśli musisz, prościej byłoby owinąć aktualizację i łącze w procedurę lub po prostu wydać dwie instrukcje - przypuszczalnie wszystko, co wykonuje aktualizację, i tak jest w miarę kontrolowane, w przeciwnym razie musiałbyś mieć do czynienia z wieloma osobami wyzwalającymi tę wielokrotność razy, co byłoby jeszcze większym bałaganem.
Prawdopodobnie możesz sprawić, by to zadziałało, dodając PRAGMA autonomous_transaction;
do wyzwalacza, jak pokazano w przypadku podobnego problemu (tworzenie widoku zamiast linku) w tej odpowiedzi , ale w tej chwili nie jestem w stanie tego przetestować.
create or replace
TRIGGER CreateLinkTrigger
after UPDATE of Year ON tableInit
for each row
DECLARE
add_link VARCHAR2(200);
PRAGMA autonomous_transaction;
BEGIN
...
Możesz również zmusić wyzwalacz do przesłania zadania asynchronicznego w celu wykonania DDL, jak opisano w tej odpowiedzi i jest więcej przykładów w tej odpowiedzi
, gdzie możesz zmienić anonimowy blok zadania, aby wykonać execute immediate
.
Prawdopodobnie lepiej byłoby po prostu utworzyć łącza na kilka następnych lat z wyprzedzeniem w oknie obsługi, zgodnie z harmonogramem lub z procedury; zamiast próbować powiązać zmianę schematu ze zmianą danych.