Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle nach dem Update-Trigger erstellt einen öffentlichen Datenbanklink

Das Erstellen einer Datenbankverknüpfung im laufenden Betrieb scheint eine ungewöhnliche Sache zu sein. Ihr Schema sollte im Allgemeinen statisch und stabil sein. Wenn Sie jedoch müssen, wäre es einfacher, das Update und den Link in eine Prozedur zu packen oder einfach zwei Anweisungen auszugeben - vermutlich wird das, was das Update durchführt, sowieso ziemlich kontrolliert, sonst müssten Sie sich mit mehreren Personen befassen, die dieses Multiple auslösen mal, was noch schlimmer wäre.

Sie können dies wahrscheinlich zum Laufen bringen, indem Sie PRAGMA autonomous_transaction; hinzufügen zu Ihrem Auslöser, wie für ein ähnliches Problem (Erstellen einer Ansicht statt eines Links) in dieser Antwort , aber ich bin im Moment nicht in der Lage, das zu testen.

create or replace
TRIGGER CreateLinkTrigger
after UPDATE of Year ON tableInit 
for each row
DECLARE
    add_link VARCHAR2(200);
    PRAGMA autonomous_transaction;
BEGIN
    ...

Sie können den Trigger auch dazu bringen, einen asynchronen Job zu senden, um die DDL auszuführen, wie in dieser Antwort , und es gibt mehr von einem Beispiel in dieser Antwort , wo Sie den anonymen Block des Jobs ändern würden, um Ihre execute immediate auszuführen .

Es wäre wahrscheinlich besser, die Links für die nächsten Jahre nur im Voraus während eines Wartungsfensters oder nach einem Zeitplan oder aus einem Verfahren zu erstellen. anstatt zu versuchen, eine Schemaänderung einer Datenänderung zuzuordnen.