2017-06-13 9 views
0

こんにちは、私はコンパイルできないトリガを3つ持っています。 1)私はPL/SQLでこのテーブルを持っています - 解決策はこの記事の下の最初のコメントでした!PL/SQLの作業変数がありません

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

そして、それは名前の宣言とは何かを持っている、ほぼ必ず、このトリガー文句を言わない仕事、イム。 PL/SQL::

誰かがDBでこのテーブルを編集するとき、それが起動するため、このトリガーの背後にある考え方は無視SQL文を、そして

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; 
/

イムは、このエラー エラー(4,5)を取得します私たちは今編集したこのプロジェクトで何人の人々が働いているかを見ることができます。 new.DUE_DATEと今でイム:DUE_DATE

2)この表では

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

私は私がすることによって、テーブルの変更を呼び出すようにしようとしていたエラーを取得しました。前方に移動することができません

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; 
/

私は本当に私が得ることができるすべての助けを訴えるでしょう。ありがとう!このトリガーで

+0

を行う方法ではないだけで、構文エラーのように見えます。 'Count(PersonID)INTO peoplecount'を選択します。 –

+0

OK、それは1番の数字で動作します:D ありがとう – QuietDaniel

答えて

0

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; 
/

Select INTO peoplecount Count(PersonID) FROM...あなたはselect <column1>, <column2>, ... INTO <variable1>, <variable2>, ...

Oracle DB SELECT INTO

関連する問題