今天在做Oracle的缓存策略时,写了个触发器(在网上查找的资料),可以创建成功,可是使用是出现“触发器无效且无法重新确认问题”
以下是主要过程CREATE OR REPLACE TRIGGER
TEST_CACHE_BY_ORACLE_DEPENDNCY AFTER
INSERT
OR UPDATE
OR DELETE ON userinfo 
declare file_handle utl_file.file_type;
BEGIN
--打开文件
file_handle := utl_file.file_open('FILEPATH','TextFile.txt','w');
--将当前系统时间写入文件
IF utl_file.is_open(file_handle) THEN
 utl_file.put_line(file_handle,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
END IF;
--关闭文件
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
 IF utl_file.is_open(file_handle) THEN
  utl_file.fclose(file_handle);
 END IF;
EXCEPTION
 WHEN OTHERS THEN
  NULL;
 END;
END;

解决方案 »

  1.   

    这里有问题?有两个begin end哦
      

  2.   

    不知道一个存储过程里面能不能有两个begin/and
      

  3.   

    先验证一下下面的模块是否可以成功执行。declare file_handle utl_file.file_type;
    BEGIN
    --打开文件
    file_handle := utl_file.file_open('FILEPATH','TextFile.txt','w');
    --将当前系统时间写入文件
    IF utl_file.is_open(file_handle) THEN
     utl_file.put_line(file_handle,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
    END IF;
    --关闭文件
    utl_file.fclose(file_handle);
    EXCEPTION
    WHEN OTHERS THEN
    BEGIN
     IF utl_file.is_open(file_handle) THEN
      utl_file.fclose(file_handle);
     END IF;
    EXCEPTION
     WHEN OTHERS THEN
      NULL;
     END;
    END;
    注意,FILEPATH 目录对象应该事先创建,且触发器的所有者应该对此目录对象具有“读/写”权限。
      

  4.   

    我觉得 触发器本身么问题,但FILEPATH 这应该填oracle 所在主机的绝对路径吧。
      

  5.   

    create or replace directory FILEPATH as 'H:\oraclerelyon;  grant read on directory FILEPATH to public;FILEPATH 目录对象应该事先创建,且触发器的所有者应该对此目录对象具有“读/写”权限-----已通过了