2015-06-02 82 views
-3

當我嘗試創建這個觸發器:無效標識符時產生觸發

CREATE OR REPLACE trigger T25 
BEFORE DELETE ON employer 
FOR EACH ROW 

DECLARE 
vnbr number; 
BEGIN 

SELECT * into vnbr from employer where role="utilisateu"; 
if(:old.role=vnbr) THEN 

RAISE_APPLICATION_ERROR(-20001,'impossible de supprimer ce role'); 
END IF; 
END; 
/

我得到這個錯誤:

PL/SQL:SQL語句忽略
PL/SQL:ORA-00904 : 「utilisateu」:無效的標識符

+0

請參閱手冊中「Oracle SQL的基本元素」一章中的「文字」一節:http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF00217 –

+0

'vnbr'是**標量**變量,而不是**集合**變量。所以,'select * into vnbr'將會失敗。 –

+0

不要刪除[完全有效的問題](http://stackoverflow.com/questions/33641935/maximum-execution-time-in-phpmyadmin)當[某人回答你的問題]時該怎麼辦(http://stackoverflow.com/幫助/人,答案) – RiggsFolly

回答

1

第一字面值應包含在'

SELECT * into vnbr from employer where role='utilisateu'; 

還向我們展示了employer表,它只包含一個值嗎?您正在選擇*vnbr(number)變量。你應該指定你所在的列名並插入vnbr。此外,如果condition超過一行,則查詢將失敗,因爲它將返回多個值,並且您試圖將其保存到一個變量中。