2017-06-13 3 views
0

Hallo, ich habe 3 Auslöser, die ich nicht kompilieren kann, würde ich einige Hilfe schätzen, wie ich es nicht umgehen kann. 1) Ich habe diese Tabelle in PL/SQL - Lösung war der erste Kommentar unter diesem Beitrag!Nicht funktionierende Variablen in PL/SQL

CREATE TABLE Personel_Project (
    ProjectID INT, 
    PersonID INT, 
    FOREIGN KEY (ProjectID) REFERENCES Project(ProjectID), 
    FOREIGN KEY (PersonID) REFERENCES Personel(PersonID) 
);/ 

Und dieser Trigger wird nicht funktionieren, im fast sicher, es hat etwas mit dem Namen Erklärung zu tun.

CREATE OR REPLACE TRIGGER peopleInProjects 
AFTER DELETE OR INSERT OR UPDATE ON Personel_Project 
FOR EACH ROW 
DECLARE 
projectnumber NUMBER := :new.ProjectID; 
peoplecount NUMBER; 
BEGIN 
    Select INTO peoplecount Count(PersonID) FROM Personel_Project Group by projectnumber; 
    dbms_output.put_line('ID of project: ' || projectnumber); 
    dbms_output.put_line('number of people working in this project: ' || peoplecount); 
END; 
/

Im bekommen diesen Fehler Fehler (4,5): PL/SQL: SQL-Anweisung ignoriert

Die Idee hinter diesem Trigger ist für sie zu starten, wenn jemand diese Tabelle in DB bearbeitet und Wir können sehen, wie viele Leute in diesem gerade bearbeiteten Projekt arbeiten.

2)

CREATE TABLE Project (
    ProjectID INT PRIMARY KEY, 
    Name VARCHAR(255), 
    Due_date DATE, 
    Cost INT, 
    Payout INT 
); 

Mit dieser Tabelle war ich immer einen Fehler, wenn ich versuche, die Änderung in der Tabelle zu nennen von: new.DUE_DATE und jetzt im mit: DUE_DATE. Unfähig, weiterzugehen

CREATE OR REPLACE TRIGGER showChange 
    BEFORE 
    INSERT OR 
    UPDATE OF DUE_DATE, COST, PAYOUT OR 
    DELETE 
    ON PROJECT 
BEGIN 
    CASE 
    WHEN INSERTING THEN 
     DBMS_OUTPUT.PUT_LINE('you put in this information' || :DUE_DATE || :COST || :PAYOUT); 
    WHEN UPDATING('Due_date') THEN 
     DBMS_OUTPUT.PUT_LINE('you updated due date to be' || :DUE_DATE); 
    WHEN UPDATING('Cost') THEN 
     DBMS_OUTPUT.PUT_LINE('you updated cost to be' || :COST); 
    WHEN UPDATING('Payout') THEN 
     DBMS_OUTPUT.PUT_LINE('you updated Payout to be' || :PAYOUT); 
    WHEN DELETING THEN 
     DBMS_OUTPUT.PUT_LINE('You deleted the project'); 
    END CASE; 
END; 
/

Ich würde wirklich alle Hilfe, die ich bekommen kann. Vielen Dank!

+0

wie nur ein Syntaxfehler. 'Wählen Sie Anzahl (PersonID) IN Personenanzahl. –

+0

ok, das funktioniert für Nummer 1: D Danke – QuietDaniel

Antwort

0

In diesem Trigger:

CREATE OR REPLACE TRIGGER peopleInProjects 
AFTER DELETE OR INSERT OR UPDATE ON Personel_Project 
FOR EACH ROW 
DECLARE 
projectnumber NUMBER := :new.ProjectID; 
peoplecount NUMBER; 
BEGIN 
    Select INTO peoplecount Count(PersonID) FROM Personel_Project Group by projectnumber; 
    dbms_output.put_line('ID of project: ' || projectnumber); 
    dbms_output.put_line('number of people working in this project: ' || peoplecount); 
END; 
/

Die Select INTO peoplecount Count(PersonID) FROM..., der nicht, wie Sie ein tun Looks select <column1>, <column2>, ... INTO <variable1>, <variable2>, ...

Oracle DB SELECT INTO