问题描述
你好,
我有一个流水线函数,它检索我的文件名,我馈送到UTL_FILE.FCOPY,如下所示:
关于为什么会发生这种情况有什么解释吗?
谢谢,
问候,
普拉文·库马尔。
我有一个流水线函数,它检索我的文件名,我馈送到UTL_FILE.FCOPY,如下所示:
DECLARE
PROCEDURE copy_var_templates (p_var_report_name st_string)
IS
lkv_template_dir CONSTANT st_string := 'TEMPLATES';
lkv_working_dir CONSTANT st_string := 'WORKING';
BEGIN
--Before generating PDF, We need to move the template files to working directory:
FOR i
IN (SELECT COLUMN_VALUE template_name
FROM TABLE (fn_templates)) --This Pipelined SQL spits the filenames
LOOP
UTL_FILE.fcopy (
lkv_template_dir,
i.template_name,
lkv_working_dir,
replace (lv_file_name, 'TEMPLATE', var_file_name));
END LOOP;
END;
BEGIN
copy_var_templates ('BUSINESS_REPORT');
END;
/
--The Above code throws the FILE READ Error.
--Strangely Enough, When I try to do a simple UTL_FILE.FCOPY like below it just works:
BEGIN
utl_file.fcopy ('TEMPLATES', 'TEMPLATE_rep.svg', 'DET_WORKING', 'BUSINESS_REPORT_rep.svg');
END;
/关于为什么会发生这种情况有什么解释吗?
谢谢,
问候,
普拉文·库马尔。
专家解答
你的代码是合理的,例如
所以我可以假设你在文件上缺少一些权限,或者在文件名等方面有一些其他逻辑错误。我们需要看到一个更完整的测试用例。
SQL> create or replace directory TEMP as 'c:\temp';
Directory created.
SQL> create or replace directory TMP as 'c:\tmp';
Directory created.
SQL>
SQL> host "echo Hello > c:\temp\file1.dat"
SQL> host "echo Hello > c:\temp\file2.dat"
SQL> host "echo Hello > c:\temp\file3.dat"
SQL> host "echo Hello > c:\temp\file4.dat"
SQL>
SQL>
SQL> DECLARE
2 PROCEDURE copy_var_templates
3 IS
4 lkv_template_dir CONSTANT varchar2(20) := 'TEMP';
5 lkv_working_dir CONSTANT varchar2(20) := 'TMP';
6 fn_templates sys.odcivarchar2list := sys.odcivarchar2list('file1.dat','file2.dat','file3.dat','file4.dat');
7 BEGIN
8 FOR i
9 IN (SELECT COLUMN_VALUE template_name
10 FROM TABLE (fn_templates)) --This Pipelined SQL spits the filenames
11 LOOP
12 UTL_FILE.fcopy (
13 lkv_template_dir,
14 i.template_name,
15 lkv_working_dir,
16 replace (i.template_name, 'file', 'newfile'));
17 END LOOP;
18 END;
19 BEGIN
20 copy_var_templates;
21 END;
22 /
PL/SQL procedure successfully completed.
SQL> host dir c:\tmp\new*
Volume in drive C is OS
Volume Serial Number is 66D0-4AB5
Directory of c:\tmp
15/06/2018 01:25 PM 8 newfile1.dat
15/06/2018 01:25 PM 8 newfile2.dat
15/06/2018 01:25 PM 8 newfile3.dat
15/06/2018 01:25 PM 8 newfile4.dat
4 File(s) 32 bytes
0 Dir(s) 84,435,816,448 bytes free
SQL>
所以我可以假设你在文件上缺少一些权限,或者在文件名等方面有一些其他逻辑错误。我们需要看到一个更完整的测试用例。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




