1

我正在尝试在 oracle 服务器的某个目录 XYZ 中获取文本文件 abc.txt 的时间戳。该文件可以在一天中的任何时间更新,我必须检查该文件是否在昨天午夜之后的任何时间更新,如果是,我需要将该文件作为附件通过电子邮件发送。

还有其他方法可以检查吗?

我在互联网上搜索了很多,但找不到解决方案。严重不知道如何完成它。

如果有人能指导我,那就太好了。

谢谢。

4

2 回答 2

1

我认为您必须通过编写 java 程序来做到这一点,如 Tom Kyte 所述:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439619916584

GRANT JAVAUSERPRIV to <your user>
/
create global temporary table DIR_LIST
( filename varchar2(255) )
  on commit delete rows
/
create or replace and compile java source named "DirList"
    as
    import java.io.*;
    import java.sql.*;

    public class DirList
    {
      public static void getList(String directory)
                       throws SQLException
      {
        File path = new File( directory );
        String[] list = path.list();
        String element;

        for(int i = 0; i < list.length; i++)
        {
            element = list[i];
            #sql { INSERT INTO DIR_LIST (FILENAME)
                   VALUES (:element) };
        }
      }
    }
/
create or replace procedure get_dir_list( p_directory in varchar2 )
    as language java
    name 'DirList.getList( java.lang.String )';
/
于 2013-06-27T08:51:20.230 回答
1

另一种方法可能是对外部表使用预处理器指令。请查看 Kyte 先生在 2012 年 11 月/12 月 Oracle 杂志上的文章。他在玩unix df,你可以玩unix ls 或windows dir。

http://www.oracle.com/technetwork/issue-archive/2012/12-nov/o62asktom-1867739.html

SQL> create table df
  2  (
  3   fsname   varchar2(100),
  4   blocks   number,
  5   used     number,
  6   avail    number,
  7   capacity varchar2(10),
  8   mount    varchar2(100)
  9  )
 10  organization external
 11  (
 12    type oracle_loader
 13    default directory exec_dir
 14    access parameters
 15    (
 16      records delimited
 17      by newline
 18      preprocessor
 19      exec_dir:'run_df.sh'
 20      skip 1
 21      fields terminated by
 22      whitespace ldrtrim
 23    )
 24    location
 25    (
 26      exec_dir:'run_df.sh'
 27    )
 28  )
 29  /
Table created.
于 2013-06-27T18:56:21.480 回答