oracle触发器没效果
时间: 2023-11-24 19:49:32 浏览: 164
可能是以下原因导致Oracle触发器没有效果:
1. 触发器没有启用。可以使用以下语句检查触发器是否启用:SELECT TRIGGER_NAME, STATUS FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'trigger_name';
2. 触发器没有正确编写。可以使用以下语句检查触发器是否有语法错误:SHOW ERRORS TRIGGER trigger_name;
3. 触发器没有正确绑定到表上。可以使用以下语句检查触发器是否正确绑定到表上:SELECT TRIGGER_NAME, TABLE_NAME FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'trigger_name';
4. 触发器没有正确设置触发事件。可以使用以下语句检查触发器是否正确设置触发事件:SELECT TRIGGER_NAME, TRIGGERING_EVENT FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'trigger_name';
5. 触发器没有正确执行。可以使用以下语句检查触发器是否正确执行:SELECT * FROM USER_ERRORS WHERE NAME = 'trigger_name';
相关问题
在cmd窗口用Oracle21c 创建一个触发器让PDB能够在CDB启动时打开,并验证效果
在Oracle 21c 中,创建一个CDB(Common Database Container)级别的触发器来确保PDB (Pluggable Database) 在CDB启动时自动打开,可以使用SQL*Plus 或者 SQL Developer 等客户端工具。以下是一个基本步骤:
首先,你需要登录到CDB的 root 用户权限下。例如,如果你使用的是SQL*Plus,你可以这样做:
```sql
sqlplus / as sysdba
```
然后,可以在CDB级别创建一个触发器,当CDB启动时运行。这个触发器通常会在`DATABASE_CHANGE_TRACKING`模式下创建,因为这允许你在CDB级别管理所有PDB的状态。假设触发器名为`AUTO_OPEN_PDB_TRIGGER`:
```sql
CREATE OR REPLACE TRIGGER AUTO_OPEN_PDB_TRIGGER
AFTER STARTUP ON DATABASE
BEGIN
FOR DB_NAME IN (SELECT DISTINCT name FROM V$PLUGGABLE_DATABASE WHERE OPEN = 'FALSE')
LOOP
EXECUTE IMMEDIATE 'ALTER PDB OPEN ''' || DB_NAME || '''';
END LOOP;
END;
/
```
运行完上述命令后,触发器就创建好了。每次CDB启动时,它会检查所有未打开的PDB并尝试打开它们。
为了验证效果,你可以关闭一些PDB,然后重启CDB。查看V$SESSION表确认PDB是否已经自动打开。如果触发器正常工作,你应该能看到PDB在启动过程中被打开。
阅读全文