可以在存储过程里面用LogMiner分析归档文件吗?
分析会用到 EXECUTE dbms_logmnr_d.build...等语句,我将这些语句直接写在存储过程里面编译会报错,我用EXECUTE IMMEDIATE 'EXECUTE dbms_logmnr_d.build...'; 会在调用的时候报无效SQL的错。
我对存储过程是新手,希望大家帮帮我,我应该怎么处理这样的语句呢?
先谢了!

解决方案 »

  1.   

    直接在存储过程中写:dbms_logmnr_d.build...即可
      

  2.   

    肯定可以,直接写和excute immediate应该都行,检查是否有地方写错了,或者权限不足
      

  3.   

    谢谢fenixshadow和bjt_,直接用dbms_logmnr_d.build...就可以了。
    还有一个问题,我想把select的结果导出到文件或者返回,应该怎么写呢?
    本来SPOOL可以导出到文本文件的,但是在存储过程里面直接用spool $file_path;不行。
      

  4.   

    spool不能在存储过程里面使用,看来需要用到ORACLE的UTL_FILE包了。
      

  5.   

    create or replace procedure myTest
    IS
      script_file utl_file.file_type;
      temp_text VARCHAR2(1000);begin     DBMS_LOGMNR.ADD_LOGFILE('D:\oracle\product\10.2.0\flash_recovery_area\ARC1_24_638118666.DBF', OPTIONS=>dbms_logmnr.NEW);
      
         DBMS_LOGMNR.START_LOGMNR(DictFileName=>'D:\oracle\product\10.2.0\share\logmnr_dict.ora',Options=>dbms_logmnr.NO_ROWID_IN_STMT);     SELECT sql_redo INTO temp_text FROM v$logmnr_contents WHERE seg_owner = 'AAA';
         
         script_file := utl_file.fopen('D:\oracle\product\10.2.0\share\','test.txt','a');
         
         utl_file.put_nchar(script_file, temp_text);
         
         utl_file.fclose(script_file);
              
         DBMS_LOGMNR.end_logmnr;end myTest;
    以上是我的存储过程,编译和调用时都没报错,但是就是没有导出文件。
    我在CMD里面执行过这条select语句,是有结果集的。
    这个存储过程有什么问题呢?
      

  6.   

    找到错误信息了,是因为select语句返回了多行数据。
    但是有没有办法将所有的结果集一次性导出到一个文本文件呢?
    谁知道吗?