2014-09-22 49 views
0
 CREATE OR REPLACE PROCEDURE UPDATE_AGE_VALUES 
     IS 
     cursor_ssn_number tbl_Patient.ssn_number%type; 
     cursor_patient_age tbl_Patient.patient_age%type;  
     age1 tbl_Patient.patient_age%type; 
     age2 tbl_Patient.patient_age%type; 
     age3 tbl_Patient.patient_age%type; 
     ssn_number1 tbl_Patient.ssn_number%type; 
     ssn_number2 tbl_Patient.ssn_number%type; 
     ssn_number3 tbl_Patient.ssn_number%type; 
     average number:=0; 
     i number:=1; 
     CURSOR cursor_tbl_Patient IS 
     SELECT ssn_number,patient_age FROM tbl_Patient ORDER BY patient_age ASC; 
     BEGIN 
     OPEN cursor_tbl_Patient; 
     LOOP 
      FETCH cursor_tbl_Patient into cursor_ssn_number,cursor_patient_age; 
      EXIT WHEN cursor_tbl_Patient%NOTFOUND; 
      IF i=1 THEN 
       age1:=cursor_patient_age; 
       ssn_number1:=cursor_ssn_number; 
       i:=i+1; 
      ELSIF i=2 THEN 
       age2:=cursor_patient_age; 
       ssn_number2:=cursor_ssn_number; 
       i:=i+1; 
      ELSIF i=3 THEN 
       age3:=cursor_patient_age; 
       ssn_number3:=cursor_ssn_number; 
       average:=(age1+age2+age3)/3; 
       UPDATE tbl_Patient SET patient_age=average where ssn_number IN (ssn_number1,ssn_number2,ssn_number3); 
       i:=1; 
       average:=0; 
       commit; 
      END IF; 
     END LOOP; 
     CLOSE cursor_tbl_Patient; 
     END; 
     /


     CREATE OR REPLACE TRIGGER CHANGE_ROW_VALUES 
     AFTER INSERT ON tbl_Patient 
     FOR EACH ROW  
     BEGIN 
      CALL UPDATE_AGE_VALUES; 
     END; 
     /

以上代碼嘗試一個行被插入後,修改的行值調用存儲過程。該過程被創建爲execute.But,但無法從Trigger調用該過程。我不知道爲什麼。 我得到的錯誤是: 2/7,PLS-00103:遇到符號「UPDATE_AGE_VALUES」時 ,期待以下之一: ,:=。 (@%; ,符號「:=」代替「UPDATE_AGE_VALUES」到 ,繼續無法從觸發

我錯過了什麼 在此先感謝!

回答

0

CALL是不是一個有效的語句?在PL/SQL呼叫在PL/SQL程序,你只需要給它的名字,如:

CREATE OR REPLACE TRIGGER CHANGE_ROW_VALUES 
    AFTER INSERT ON tbl_Patient 
    FOR EACH ROW  
BEGIN 
    UPDATE_AGE_VALUES; 
END; 

你的下一個問題將是該UPDATE_AGE_VALUES讀取和更新tbl_Patient,這將失敗,因爲UPDATE_AGE_VALUES是從在tbl_P上定義的行觸發器調用心急。如果你從觸發器中刪除FOR EACH ROW它可能會工作,但我不會回答性能。

分享和享受。

+0

謝謝..它的工作! – Sarangan 2014-09-28 16:54:21

+0

稍作修改! UDPATE_AGE_VALUES();爲我工作! – Sarangan 2014-09-28 16:56:14

0
CREATE OR REPLACE TRIGGER CHANGE_ROW_VALUES 
    AFTER INSERT ON tbl_Patient 
    FOR EACH ROW  
    BEGIN 
    UPDATE_AGE_VALUES(); 
    END; 

這對我有效!