sql - 在 utl_file.fopen 的 'filename' 属性中使用 select
问题描述
我有一个从视图中提取数据并将其以 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 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;
带有的部分(select to_char(max(EVENT_TS)) from MY_TIMESTAMPS)
会引发错误。如何设置此动态文件名属性?也许在程序开始时将其写入某个变量?我尝试使用 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 语句不需要异常处理。
推荐阅读
- android - 为什么在填充之前使用Adapter中的列表呢?
- mysql - 如何使用mysql sum() 函数计算每一行的总和?
- angular - Angular 中的依赖注入有什么用,因为它显然没有解决任何问题?
- java - 为什么 Iterators.size() 使迭代器为空?
- r - 告诉哪些行是不同的,同时保持 ID 变量
- kubernetes - Fetching Stackdriver Monitoring TimeSeries data for a pod running on a k8s cluster on GKE using the REST API
- visual-studio - 如何重命名 Visual Studio
- ios - Flutter plugin configuration issue
- perl - 将多元素字符串拆分为哈希
- javascript - Responsive elements hidden when no space