Oracle 使用PL/SQL获取文件的时间戳

Oracle 使用PL/SQL获取文件的时间戳,oracle,file,plsql,timestamp,Oracle,File,Plsql,Timestamp,我试图获取oracle server中某个目录XYZ中的文本文件abc.txt的时间戳。该文件可以在一天中的任何时间更新,我必须检查该文件是否在昨天午夜后的任何时间更新,如果是,我需要将该文件作为附件发送电子邮件 我还有别的办法可以查一下吗 我在网上搜索了很多,但没有找到解决办法。 真的不知道该怎么做 如果有人能指引我,那就太好了 谢谢。我认为您必须编写一个java过程来实现这一点,如Tom Kyte所述: 将JAVAUSERPRIV授予 / 创建全局临时表目录列表 (文件名varchar2(

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

我还有别的办法可以查一下吗

我在网上搜索了很多,但没有找到解决办法。 真的不知道该怎么做

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


谢谢。

我认为您必须编写一个java过程来实现这一点,如Tom Kyte所述:

将JAVAUSERPRIV授予
/
创建全局临时表目录列表
(文件名varchar2(255))
在提交时删除行
/
创建或替换并编译名为“DirList”的java源代码
作为
导入java.io.*;
导入java.sql.*;
公共类目录表
{
公共静态void getList(字符串目录)
抛出SQLException
{
文件路径=新文件(目录);
String[]list=path.list();
字符串元素;
for(int i=0;i
另一种方法可能是对外部表使用预处理器指令。 请看一下凯尔特先生在2012年11月/12月《甲骨文》杂志上的文章。他正在玩unix-df,你可以玩unix-ls或windows-dir


也许我能帮上忙,谢谢你的回复。但是我想知道一种使用PL/SQL获取任何文件的时间戳的方法。可以这样做吗?您可以从PL/SQL调用@davek的java过程。我不认为有任何方法可以直接从PL/SQL获取这个属性。我查看了UTL#U文件包,有一个函数可以获取文件属性,但它只返回块的大小和#,找到了一种方法。我们可以编写一个unixshell脚本来获取文件的时间戳,然后检查是否可以根据需要调用oracle过程$文件_ts=$(stat--printf=%y文件名| cut-d.-f1)$昨日时间=当前时间戳-86400;如果[文件\u ts-gt$昨天\u ts];然后是sqlplus-sscott@SID/老虎
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 )';
/
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.