編譯后錯誤提示為pls-00103:出現符號""在需要下列之一時:begin case declare


轉自: https://www.cnblogs.com/songdavid/archive/2011/09/13/2174908.html

create or replace trigger auth_secure
 before insert or update or delete --/對整表更新前觸發
  on g002
begin
 IF to_char(sysdate,'DY','nls_date_language=american')
in ('THU') then
Raise_application_error(-20001, 'ou dont have access to modify this table.');
 End if;
End ;

編譯后錯誤提示為:
5 pls-00103:出現符號""在需要下列之一時:begin case declare exit for goto if loop mod null pragma raise return select update while with ...
8 pls-00103:出現符號""在需要下列之一時:begin case declare else elseif end exit for goto if loop mod null pragma raise return select update while with ...

 

原因分析:

肉眼看不到的,有可能是全角的空格
create or replace trigger auth_secure
 before insert or update or delete --/對整表更新前觸發
  on g002
begin
IF to_char(sysdate,'DY','nls_date_language=american') --前面可能是全角的空格
in ('THU') then
Raise_application_error(-20001, 'ou dont have access to modify this table.');
End if; --前面可能是全角的空格
End ;

 

這行代碼前IF to_char(sysdate,'DY','nls_date_language=american')
有兩個不可見的控制符(看似空格,其實編碼為A1,十進制161),這是導致編譯錯誤的原因
同樣語句End if; 前面也有兩個。
刪除后應該編譯OK
不知在什么地方復制的

解決辦法:

因為是從別處復制的代碼,可能有非法字符,刪除了重新寫一遍就可以了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM