2017-06-13 19 views
0

嗨,我有3个触发器,我无法编译,我会appriciate一些帮助,因为我不能解决它。 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) 
);/ 

而这个触发不会工作,即时通讯几乎可以肯定它是与名字的声明。

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):PL/SQL:忽略

这触发背后的想法是,它启动时,有人在编辑这个数据库表的SQL语句,并我们可以看到有多少人在我们刚刚编辑的这个项目中工作。

2)

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

有了这张表我是越来越当我试图打电话给在表中的更改的错误:new.DUE_DATE现在随着即时通讯:DUE_DATE。无法前进

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

我会真正appriciate我可以得到的所有帮助。谢谢!

+0

看起来像只是一个语法错误。 '选择计数(PersonID)INTO peoplecount'。 –

+0

好吧,这对于第一个作品: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