Hallo,
wir wollen eine Prozedur in unsere Datenbank implementieren.
Von unserem Prof haben wir eine Lösung bekommen. Da wir nun schon lange Zeit über dieser Aufgabe brüten, dachten wir, dass uns hier vielleicht Jemand helfen kann.
Die Aufgabe ist Folgende:
Implementieren Sie eine Prozedur ins_project welche neue Projekte in die Tabelle project einfügt. Die Prozedur bekommt als Parameter die Projektnummer, den Projektnamen, die Departmentnummer und das Budget übergeben. Folgende Fälle sind beim Einfügen der Daten mit einer entsprechenden Fehlermeldung zu berücksichtigen:
1) Das Projekt ist schon vorhanden
2) Die Departmentnummer verweist auf ein nicht vorhandenes Department
3) Es tritt ein anderer Fehler auf, z.B. Not Null Wert
Die Lösung die wir bekommen haben, ist diese:
set serveroutput on;
DECLARE
PROCEDURE ins_project(pnr IN NUMBER, name IN VARCHAR, pdeptno IN NUMBER,
budget IN NUMBER) AS
vdeptno NUMBER(4);
BEGIN
-- Überprüfung ob Department existiert
BEGIN
vdeptno:=-1;
SELECT deptno INTO vdeptno FROM department WHERE deptno=pdeptno;
EXCEPTION
WHEN NO_DATA_FOUND THEN dbms_output.put_line ('Department nicht vorhanden');
END;
--
IF (vdeptno !=-1 AND name is NOT NULL) THEN
BEGIN
INSERT INTO project(projno, pname, deptno, budget)
VALUES (pnr, name, pdeptno, budget);
EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLERRM);
END;
END IF;
END;
-- Hauptprogramm
BEGIN
ins_project(999,'testa',10, 5000);
-- ins_project(999,'testa',10, 5000);
-- ins_project(666,'testa',77, 5000);
-- ins_project(888,'',10, 5000);
END;
/
Was hat das Vdeptno hinter dem AS zu bedeuten (Entspricht das überhaupt dem normalen Aufbau bei einer Prozedur Implementierung?)
Wofür steht die -1 und ist die Aufgabe überhaupt so vollständig gelöst, da wir nicht rausfinden konnten, wo geprüft wird, ob das Projekt schon vorhanden ist.
Vielleicht kann uns Jemand weiterhelfen, da wir daran langsam verzweifeln.

Danke schonmal.

Lesezeichen