Oracle 捕获最后一个查询的触发器不工作

Oracle 捕获最后一个查询的触发器不工作,oracle,triggers,Oracle,Triggers,我正在尝试在Oracle 12c上创建触发器。我使用这个触发器在更新后捕获表TEST上的最后一个查询语法,并将其存储在TEST\u LOL表中。但有一个错误,即Error6,3:PL/SQL:SQL语句被忽略,error6106:PL/SQL:ORA-00942:table或view不存在 这是我的触发代码: CREATE OR REPLACE TRIGGER TRIGGER1 AFTER UPDATE ON TEST DECLARE original_query varchar2(5

我正在尝试在Oracle 12c上创建触发器。我使用这个触发器在更新后捕获表TEST上的最后一个查询语法,并将其存储在TEST\u LOL表中。但有一个错误,即Error6,3:PL/SQL:SQL语句被忽略,error6106:PL/SQL:ORA-00942:table或view不存在

这是我的触发代码:

CREATE OR REPLACE TRIGGER TRIGGER1 
AFTER UPDATE ON TEST
DECLARE
    original_query varchar2(500);
BEGIN
    select sql_text into original_query 
    from v$sql 
    where first_load_time=(select max(first_load_time) from v$sql);
    INSERT INTO TEST_LOL (ACTION) VALUES (original_query);
END;
显然,在从v$sql将sql\u文本选择到原始查询的语法上存在一些错误,其中first\u load\u time=从v$sql选择maxfirst\u load\u time; 当我不用扳机的时候,它运行得很好。 例如,当我运行此查询代码时:

"UPDATE TEST SET name='indra' WHERE id =1"
select sql_text from v$sql where first_load_time=(select max(first_load_time) from v$sql) ;
然后运行捕获查询代码:

"UPDATE TEST SET name='indra' WHERE id =1"
select sql_text from v$sql where first_load_time=(select max(first_load_time) from v$sql) ;
然后它完美地返回最后一个查询:

"UPDATE TEST SET name='indra' WHERE id =1"

我有什么不对劲吗?请帮忙。谢谢

您是直接授权还是通过角色授权访问v$sql。这可能是该问题的重复。即使你让它工作,这也不会可靠地工作,因为select MAXIRST\u load\u time不特定于触发该触发器的用户。v$sql包含来自数据库所有连接的语句,包括Oracle自身运行的内部语句。感谢您的回复。谢谢你的建议。在授予对表v$sql的访问权限后,它将正常工作。但就像@a_horse_和_no_name有时说的那样,它会让Oracle自己运行查询。你知道怎么解决这个问题吗?