2015-06-04 59 views
-1
CREATE OR REPLACE TRIGGER P88 
AFTER INSERT ON reparation  
FOR EACH ROW 

DECLARE 
vope number;  
BEGIN  
    SELECT observation_reparation into vope from repartion;  
    if(vope IS NULL)THEN 

    EXECUTE IMMEDIATE 'ALTER TABLE ' || reparation.observations_Reparation || ' MODIFY libelle_piece NVARCHAR2(50)';  
END IF; 
END; 
/

我得到這個:EXECUTE IMMEDIATE PL/SQL?

error:table or view does not exist.

+0

我tihnk你有模式名,表名和列名混淆。該觸發器在REPARATION上,您選擇列OBSERVATION_REPARATION並從模式REPARATION中截取表OBSERVATIONS_REPARATION。你真的想要截斷哪個表以及它在哪個模式中? – davegreen100

+0

@ davegreen100如果沒有指定observations_Réparation字段,我想要做的事情是觸發器會自動插入它的位置libelle_piece –

+0

好吧,我明白了,但是你想修改哪張表?是真的reparation.observations_Reparation – davegreen100

回答

-1
CREATE OR REPLACE TRIGGER P88 
AFTER INSERT ON reparation 
FOR EACH ROW 
DECLARE 
vope number; 

BEGIN 

    SELECT observation_reparation into vope from repartion; 

    if(vope IS NULL)THEN 

    EXECUTE IMMEDIATE 'ALTER TABLE reparation RENAME COLUMN observations_Reparation TO libelle_piece'; 

    END IF; 
END; 

,如果你還需要更改列的聲明中,您將需要另一個ALTER語句

alter table reparation modify (libelle_piece NVARCHAR2(50)) 
+0

像那樣EXECUTE IMMEDIATE'修復修改(libelle_piece NVARCHAR2(50))'? @ davegreen100 –

+0

立即執行'alter table reparation modify(libelle_piece NVARCHAR2(50))'; – davegreen100

+1

但是,如果實際上導致觸發器執行,則會出現錯誤。 DDL隱式提交但不允許觸發器結束事務。所以你不能在觸發器中執行DDL。 –

相關問題