oracel怎么知道触发器执行没
时间: 2023-11-28 08:49:03 浏览: 32
Oracle 数据库在触发器执行时会生成一个系统事件,可以通过查询 `V$SESSION_WAIT` 或 `V$SESSION_EVENT` 视图来查看是否有相关的事件等待。可以使用以下 SQL 语句来查看当前会话是否等待触发器执行:
```
SELECT event FROM v$session WHERE sid = <sid>;
```
其中 `<sid>` 是会话的标识符。如果该会话等待触发器执行,则会返回类似于 `trigger event` 的事件名称。如果该会话没有等待触发器执行,则不会返回该事件名称。
相关问题
oracle触发器没效果
可能是以下原因导致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';
oracle删除触发器获取当前执行sql
可以使用Oracle内置的伪列:`ORA_ROWSCN`和`ORA_SQL_TXT`来获取当前执行的SQL语句和对应的SCN号。
例如,下面是一个删除触发器的示例代码:
```
CREATE OR REPLACE TRIGGER trigger_name
BEFORE DELETE ON table_name
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('Deleting record at ' || SYSTIMESTAMP);
END;
/
DELETE FROM table_name WHERE column_name = 'value';
SELECT SCN, SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE 'DELETE FROM table_name%';
```
在这个示例中,触发器会在每次删除操作前输出当前的时间戳。然后,我们可以使用`V$SQL`系统视图来查找最近执行的删除语句,并获取对应的SCN号和SQL文本。注意,这种方法需要具有足够的系统权限来查询`V$SQL`视图。