Ich habe um diesen Auslöser gearbeitet und wenn ich das Skript ausführe, sagt es mir die vorherige Fehlermeldung. Ich kann nicht herausfinden, warum es nicht richtig kompilieren wird, jedes pl/sql Trigger-Tutorial scheint die Struktur zu haben, die mein Auslöser hat. Code ist folgende:ORA-24344: Erfolg mit Kompilierungsfehler - Auslöser APEX
create
or replace trigger new_artist before insert
on
Artist referencing new as nvartist declare counter number;
begin select
count(*) into
counter
from
Performer
where
Stage_name = nvartist.Stage_name;
if counter > 0 then signal sqlstate '45000';
else insert
into
Artist
values(
nvartist.Stage_name,
nvartist.Name
);
insert
into
Performer
values(nvartist.Stage_name);
end if;
end;
Es wird überprüft, ob der neue Künstler bereits in seinem Supertyp (Performer) liegt vor, wenn es existiert es einen Fehler gibt, wenn er es nicht fügt beide in Künstler (Stage_name varchar2, Namens- varchar2) und Performer (Stage_name). Ein weiterer Subtyp von Performer (und Geschwister zu Artist) ist Band (Stage_name), der wiederum eine Beziehung zu Artist hat. Warum schreit der Compiler mich wegen dieses Triggers an?
Vielen Dank im Voraus
Es sollte trotzdem in Runtime aufgrund muting Triggerfehler fehlschlagen, während Sie versuchen, Daten in der gleichen zugrundeliegenden Tabelle einzufügen. –
Ich lese darüber, ich habe verstanden, dass der Trigger fehlschlagen sollte, wenn es mit der Zeile, die eingefügt wurde/aktualisiert, wenn es direkt oder indirekt diese Zeile innerhalb des Triggers gelöscht, scheint es nicht der Fall zu sein. Mein Ziel ist es, zu überprüfen, ob Stage_name bereits in Performer vorhanden ist, bevor Sie ihn in Artist einfügen. Wenn es existiert (da es sich bei der Beziehung um eine disjunkte isa (Performer ISA Artist/Band) handelt, gibt es einen Fehler, aber wenn es nicht existiert, fügt es sowohl in Artist als auch in Performer ein. Ich dachte, das würde das erreichen. – Punk
In Oracle gibt es keinen SIGNAL-Befehl. Das ist MySql. Dieser Trigger wird nicht kompiliert. Verwenden Sie anstelle von Signal raise_application_error. Sie können nicht in dieselbe Tabelle einfügen und müssen dies nicht tun. Löschen Sie den Befehl "In Artist einfügen". Dies wird automatisch durchgeführt. – Mottor