Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在架构中的所有触发器中搜索单词-oracle_Sql_Oracle_Oracle9i - Fatal编程技术网

Sql 在架构中的所有触发器中搜索单词-oracle

Sql 在架构中的所有触发器中搜索单词-oracle,sql,oracle,oracle9i,Sql,Oracle,Oracle9i,我在运行应用程序时遇到问题-Oracle正在引发 ORA-04092: cannot COMMIT in a trigger issue. 现在我试图找到包含commit语句的触发器。是否可以在所有“dba_触发器”中找到包含commit语句的触发器 select * from dba_triggers statement 给我所有的dba触发器。现在,我必须用单词commit搜索这些触发器。如果您得到完整的错误堆栈,您应该能够看到哪个触发器的哪一行抛出了错误。这是最有效的方法。例如,如

我在运行应用程序时遇到问题-Oracle正在引发

ORA-04092: cannot COMMIT in a trigger issue.
现在我试图找到包含commit语句的触发器。是否可以在所有“dba_触发器”中找到包含commit语句的触发器

select * from dba_triggers statement  

给我所有的dba触发器。现在,我必须用单词
commit

搜索这些触发器。如果您得到完整的错误堆栈,您应该能够看到哪个触发器的哪一行抛出了错误。这是最有效的方法。例如,如果创建一个提交并运行插入的触发器,堆栈跟踪将显示导致错误的触发器的哪一行

SQL> create table t (
  2    col1 number
  3  );

Table created.

SQL> ed
Wrote file afiedt.buf

  1  create trigger trg_t
  2    before insert on t
  3    for each row
  4  begin
  5    commit;
  6* end;
SQL> /

Trigger created.

SQL> begin
  2    insert into t values( 1 );
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "SCOTT.TRG_T", line 2
ORA-04088: error during execution of trigger 'SCOTT.TRG_T'
ORA-06512: at line 2
您可以在源中搜索所有要查找特定字符串的触发器。类似的内容将在您指定的任何模式中的任何触发器中查找文字“COMMIT”

SELECT name, text, line
  FROM dba_source
 WHERE owner IN (<<schemas you want to search>>)
   AND upper(text) like '%COMMIT%';
选择名称、文本、行
来自dba_源
其中所有者位于()
和上面的(文本),如“%COMMIT%”;
另一方面,失败的触发器很可能正在调用存储过程,而提交的正是存储过程。因此,搜索触发器的来源可能没有好处


通过对
DBA\u依赖项
(或
ALL\u依赖项
USER\u依赖项
进行递归查询,您可能会缓解这种情况,具体取决于您的权限级别和要搜索的范围)查找可能从任何触发器调用的所有过程,并从
DBA\u source
搜索所有这些过程的源代码。但这比简单地检查完整的错误堆栈要复杂得多。

您可以将触发器导出为PL/SQL,只需搜索文本。感谢您的快速回复Justin Cave。如果可能,您可以提供第二种方法的查询。对不起。我没有完整的数据库知识,因为我是java开发人员。。pls@Satya-这需要我这是一个用于组合和测试第二个查询的代码。您确定不能取而代之的是完整的错误堆栈吗?完整的错误堆栈将立即指出问题所在——即使是第二个查询也可能需要大量的手动工作来分析结果。感谢Justin。这是我得到的错误堆栈跟踪。原因:java.sql.SQLException:ORA-00604:递归sql级别1发生错误ORA-04092:无法在触发器中提交ORA-06512:at第60行,但它不包含过程或触发器(导致此问题)的详细信息..当我试图从java应用程序连接此db时。。非常感谢您的帮助,贾斯汀。@Satya-我发布了一个您得到的堆栈跟踪示例。您是否可以运行SQL*Plus中失败的任何过程来获取完整的堆栈跟踪?