Ich habe 2 Tabellen ‚Label‘ und 'MusikerOracle-Trigger auf VARCHAR Werten arbeiten nicht
CREATE TABLE label
(labId varchar(10) NOT NULL PRIMARY KEY,
labName varchar(20) NOT NULL
);
CREATE TABLE musician
(musId varchar(10) NOT NULL PRIMARY KEY,
musName varchar(30) NOT NULL,
labId varchar(10) NOT NULL,
CONSTRAINT MusLabel FOREIGN KEY (labId) REFERENCES label(labId)
);
I einen Trigger geschaffen, um die Anzahl von Musikern zu begrenzen, ein Etikett 5 innerhalb eines Bereichs von 1 haben kann ; so dass beispielsweise ein Etikett x kann nicht sechs Musiker haben:
CREATE OR REPLACE TRIGGER before_musician_insert
BEFORE INSERT ON musician
FOR EACH ROW
DECLARE
total integer;
BEGIN
SELECT COUNT(*) INTO total
FROM musician, label
WHERE musician.labId=label.labId;
IF (total < 0 OR total > 5)
THEN
DBMS_OUTPUT.PUT_LINE('Invalid');
END IF;
END;
/
Wenn ich einen sechsten Musiker in die Tabelle mit der gleichen Etikett ID einfügen, die Insert-Anweisung nicht ‚Auslöser‘ der Trigger und der sechste Wert hinzugefügt werden an den Tisch. Ich weiß nicht, wie ich das beheben kann. Ich habe eine Check-Einschränkung versucht, aber mit Varchar-Werten funktioniert es auch nicht.
Ich schätze Ihre Hilfe.
Ihr Trigger macht keinen Sinn. Zunächst einmal ist es auf dem Musikertisch, aber Sie beschreiben das Problem als Etiketten. –
Ist dies für eine Klasse, in der Sie einen Trigger verwenden müssen? Dies ist nicht gut für einen Trigger (besonders, wenn Sie mehrere Benutzer erwarten) und die Anforderung ist nicht sehr sinnvoll - was passiert, wenn ein Label einen 6. Musiker unterschreiben möchte? Wenn Sie das wirklich durchsetzen möchten, sollten Sie das Datenmodell besser ändern. –
@Justin Cave Ja, es ist eigentlich eine Aufgabe für eine Klasse. Ich habe mich gefragt, ob ich in diesem Fall eine Checkbeschränkung verwenden könnte, und wenn ja wie? – omar