MarkusSalb
Neuer Benutzer
- Beiträge
- 1
Hallo zusammen,
ich beschäftige mich vor kurzem mit Datenbanken und daher kann noch nicht alle Fehler selber erkennen. Könnte mir wahrscheinlich jemand mit Trigger helfen?
Es gibt Rezeptdatenbank mit Tabelle "Rezept", "Speisekarte", "Anzahl_Rezepte". Rezepte, die in der Speisekarte stehen dürfen nicht gelöscht werden. Compiler ergibt immer Fehler: Fehler(8,4): PLS-00103: Encountered the symbol ";" when expecting one of the following: if
Wenn ich aber ";" lösche, ergeben sich mehrere Fehler.
DROP TABLE Speisekarte CASCADE CONSTRAINTS;
DROP TABLE Anzahl_Rezepte CASCADE CONSTRAINTS;
DROP TABLE Rezept CASCADE CONSTRAINTS;
CREATE TABLE Speisekarte(
Speisekarte_ID NUMBER(20) NOT NULL PRIMARY KEY,
Bezeichnung VARCHAR2(50)
);
CREATE TABLE Anzahl_Rezepte(
Speisekarte_ID NUMBER(20) NOT NULL,
Rezept_ID NUMBER(20) NOT NULL,
Preis NUMBER CONSTRAINT cc_preis CHECK (Preis > 0),
PRIMARY KEY (Speisekarte_ID, Rezept_ID)
);
CREATE TABLE Rezept(
Rezept_ID NUMBER(20) NOT NULL PRIMARY KEY,
Mitarbeiter_ID NUMBER(20),
Bezeichnung VARCHAR2(50),
Schlagwort VARCHAR (50),
Zubereitungsdauer NUMBER(20),
Freigabe VARCHAR2(10),
Rezept_Kategorie_ID NUMBER(20)
);
CREATE TRIGGER Rezept_in_Speisekarte
BEFORE DELETE
ON Rezept
FOR EACH ROW
DECLARE
Preis NUMBER;
BEGIN
SELECT Preis FROM Anzahl_Rezepte WHERE Rezept_ID = ld.Rezept_ID;
IF Preis != 0
THEN raise_application_error (-20000, 'Das Rezept kann nicht geloescht werden, da in der Speisekarte steht');
ELSE IF NO_DATA_FOUND THEN
NULL;
END;
ich beschäftige mich vor kurzem mit Datenbanken und daher kann noch nicht alle Fehler selber erkennen. Könnte mir wahrscheinlich jemand mit Trigger helfen?
Es gibt Rezeptdatenbank mit Tabelle "Rezept", "Speisekarte", "Anzahl_Rezepte". Rezepte, die in der Speisekarte stehen dürfen nicht gelöscht werden. Compiler ergibt immer Fehler: Fehler(8,4): PLS-00103: Encountered the symbol ";" when expecting one of the following: if
Wenn ich aber ";" lösche, ergeben sich mehrere Fehler.
DROP TABLE Speisekarte CASCADE CONSTRAINTS;
DROP TABLE Anzahl_Rezepte CASCADE CONSTRAINTS;
DROP TABLE Rezept CASCADE CONSTRAINTS;
CREATE TABLE Speisekarte(
Speisekarte_ID NUMBER(20) NOT NULL PRIMARY KEY,
Bezeichnung VARCHAR2(50)
);
CREATE TABLE Anzahl_Rezepte(
Speisekarte_ID NUMBER(20) NOT NULL,
Rezept_ID NUMBER(20) NOT NULL,
Preis NUMBER CONSTRAINT cc_preis CHECK (Preis > 0),
PRIMARY KEY (Speisekarte_ID, Rezept_ID)
);
CREATE TABLE Rezept(
Rezept_ID NUMBER(20) NOT NULL PRIMARY KEY,
Mitarbeiter_ID NUMBER(20),
Bezeichnung VARCHAR2(50),
Schlagwort VARCHAR (50),
Zubereitungsdauer NUMBER(20),
Freigabe VARCHAR2(10),
Rezept_Kategorie_ID NUMBER(20)
);
CREATE TRIGGER Rezept_in_Speisekarte
BEFORE DELETE
ON Rezept
FOR EACH ROW
DECLARE
Preis NUMBER;
BEGIN
SELECT Preis FROM Anzahl_Rezepte WHERE Rezept_ID = ld.Rezept_ID;
IF Preis != 0
THEN raise_application_error (-20000, 'Das Rezept kann nicht geloescht werden, da in der Speisekarte steht');
ELSE IF NO_DATA_FOUND THEN
NULL;
END;