/* 在使用CREATE TRIGGER语句创建触发器的时候,Oracle会对触发器进行编译。 如果编译过程中发现了错误,可以使用DBA_ERRORS(或者USER_ERRORS)视图查看错误的具体信息 虽然编译失败,但是仍旧成功的创建了触发器对象 可以使用ALTER TRIGGER COMPILE命令来对触发器进行编译。 */ --创建一个表 DROP TABLE TESTLOG; CREATE TABLE TESTLOG( USERNAME VARCHAR2(100), EVENTTIME DATE, ACTION VARCHAR2(20) ); --创建一个TRIGGER 记录登录的事件(该TRIGGER是错误的,少了一个;) CREATE OR REPLACE TRIGGER MYLOGONTRIGGER AFTER LOGON ON SCHEMA BEGIN INSERT INTO TESTLOG VALUES( USER, SYSDATE, 'LOGON' ) END; / --警告: 创建的触发器带有编译错误。 SQL> select text from dba_errors where type=upper('trigger'); TEXT -------------------------------------------------------------------------------- "PL/SQL: SQL Statement ignored PLS-00103: 出现符号 "end-of-file "在需要下列之一时: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with double -quoted delimited-identifier> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe" PL/SQL: ORA-00933: SQL 命令未正确结束 --编译新的过程 CREATE OR REPLACE TRIGGER MYLOGONTRIGGER AFTER LOGON ON SCHEMA BEGIN INSERT INTO TESTLOG VALUES( USER, SYSDATE, 'LOGON' ); END; / --使用下面的语句重新编译触发器 SQL> ALTER TRIGGER MYLOGONTRIGGER COMPILE; 触发器已更改