我正在尝试在 oracle 服务器的某个目录 XYZ 中获取文本文件 abc.txt 的时间戳。该文件可以在一天中的任何时间更新,我必须检查该文件是否在昨天午夜之后的任何时间更新,如果是,我需要将该文件作为附件通过电子邮件发送。
还有其他方法可以检查吗?
我在互联网上搜索了很多,但找不到解决方案。严重不知道如何完成它。
如果有人能指导我,那就太好了。
谢谢。
我认为您必须通过编写 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 )';
/
另一种方法可能是对外部表使用预处理器指令。请查看 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.