Sql 在utl_file.fopen的“filename”属性中使用select
我有一个从视图中提取数据并以CSV格式存储在光盘上的过程。我希望文件名包含表MY_TIMESTAMPS中的最新时间戳。现在看起来是这样的:Sql 在utl_file.fopen的“filename”属性中使用select,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个从视图中提取数据并以CSV格式存储在光盘上的过程。我希望文件名包含表MY_TIMESTAMPS中的最新时间戳。现在看起来是这样的: create or replace procedure write_file is file_handle UTL_FILE.file_type; begin file_handle := utl_file.fopen('CSV_DIR', 'EXPORT_ABC_'|| (select to_char(max(EVENT_TS)) from
create or replace procedure write_file is
file_handle UTL_FILE.file_type;
begin
file_handle := utl_file.fopen('CSV_DIR', 'EXPORT_ABC_'|| (select to_char(max(EVENT_TS)) from MY_TIMESTAMPS) ||'.csv', 'w', 32767);
for x in (select * from V_MY_VIEW
loop utl_file.put_line (file_handle, COL1|| ',' ||
COL2|| ',' ||
COL3|| ',' ||
COL4);
end loop;
utl_file.fclose(file_handle);
end write_file;
从MY_时间戳中选择to_charmaxEVENT_TS的部件抛出错误。如何设置此动态文件名属性?也许在程序开始时将其写入某个变量?我尝试使用DEFINE,但也出现了错误。是的,您可以声明一个变量,以便在select语句中使用,并添加INTO子句,如
CREATE OR REPLACE PROCDURE write_file IS
file_handle utl_file.file_type;
v_event_ts varchar2(100);
BEGIN
SELECT to_char(max(EVENT_TS)) INTO v_event_ts FROM my_timestamps;
file_handle := utl_file.fopen('CSV_DIR', 'EXPORT_ABC_'||v_event_ts||'.csv', 'w', 32767);
......
SELECT语句不需要异常处理。谢谢,它正在编译,尽管当我尝试执行该过程时,它抛出错误ORA-01843:不是有效月份。这可能与我们声明的数据类型有关吗?请您解释一下我的时间戳。事件%type的确切含义是什么?Hi@Limak,对不起,我修复了如果您直接使用SELECT maxEVENT \u ts转换为v\u事件,而不进行字符转换,您可以使用我的时间戳。事件%type表示事件列的类型,可能是datetime,而不显式表示数据类型,但在您的情况下,由于转换,我需要使用字符串数据类型。