Ergebnis 1 bis 4 von 4

Thema: Prozedur implementieren

  1. #1
    SQL500 ist offline Neuer Benutzer
    Registriert seit
    01.07.2008
    Beiträge
    2

    Standard Prozedur implementieren

    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.

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von SQL500 Beitrag anzeigen
    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.
    1. Das ist nicht PostgreSQL, es müffelt eher nach ORA.
    2. fremder Leute Hausaufgaben?
    3. nach dem AS kommt da offensichtlich eine Variablendefinition. Unter PG müßte da ein DECLARE noch kommen und überhaupt das etwas anders ausehen (aber nicht sehr viel anders...)
    4. die -1 soll offensichtlich eine Initialisierung mit einem Wert sein, der real nicht vorkommen kann
    5. wenn Du schon nicht siehst, wie eine Überprüfung auf Vorhandensein des Projektes anhand des vorliegenden Quälcodes erfolgen könnte, dann
    6. solltest Du Dich mal ganz schnell hinsetzen und selbst SQL lernen, denn
    7. wir können dies nicht für Dich übernehmen.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    SQL500 ist offline Neuer Benutzer
    Registriert seit
    01.07.2008
    Beiträge
    2

    Standard

    Genau aus diesem Grund haben wir die Frage reingestellt, weil wir gerade dabei sind SQL zu lernen. außerdem wollten wir nicht die Lösung (die ist ja da) sondern die Erklärung, warum das so ist...
    außerdem wird hier ja keiner gezwungen zu antworten...
    Ich hoffe, dass uns vielleicht noch jemand helfen kann, der auch gewillt ist, uns zu helfen.

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von SQL500 Beitrag anzeigen
    Genau aus diesem Grund haben wir die Frage reingestellt, weil wir gerade dabei sind SQL zu lernen. außerdem wollten wir nicht die Lösung (die ist ja da) sondern die Erklärung, warum das so ist...
    SQL != plsql oder plpgsql. Und ORACLE != PostgreSQL.

    1. Lerneinheit: es gibt verschiedene Systeme.


    außerdem wird hier ja keiner gezwungen zu antworten...
    Ich hoffe, dass uns vielleicht noch jemand helfen kann, der auch gewillt ist, uns zu helfen.
    Warum versuchst Du nicht einfach mal, meine Antwort verstehend zu lesen, sondern fühlst Dich sofort und unmittelbar angegriffen? Und warum erwartest Du, daß wir hier uns nun Oracle kaufen, um Dein Beispiel analysieren zu können? Again: hier PostgreSQL.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Ähnliche Themen

  1. VBscript aus einer Prozedur aufrufen
    Von sebator im Forum SQL
    Antworten: 3
    Letzter Beitrag: 16.09.2008, 16:02

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum