问题描述
我正在将此软件包注册为Oracle中的并发程序。
在目录 “DATA_NOT_RETAIL_INCOME” 中,我将只有一个文件,但我不知道该文件的全名。
在oracle中注册为并发程序时,由于文件名不固定,如何将参数传递给文件名。但是在目录中我们只有一个文件。
在目录 “DATA_NOT_RETAIL_INCOME” 中,我将只有一个文件,但我不知道该文件的全名。
在oracle中注册为并发程序时,由于文件名不固定,如何将参数传递给文件名。但是在目录中我们只有一个文件。
CREATE OR REPLACE PACKAGE BODY grm_detail(p_filename1 IN VARCHAR2) IS
v_file UTL_FILE.FILE_TYPE;
v_source VARCHAR2(4);
v_acc_date VARCHAR2(10);
v_account VARCHAR2(40);
v_transit VARCHAR2(40);
v_trans_type VARCHAR2(40);
v_amt_type VARCHAR2(40);
v_currency VARCHAR2(40);
v_amount VARCHAR2(40);
v_sign VARCHAR2(40);
g_grm_batch_id NUMBER;
v_file_path VARCHAR2(1000);
v_datstring VARCHAR2(32767) := NULL;
v_file_date VARCHAR2(10);
v_invalid_file_exception EXCEPTION;
v_file_name VARCHAR2(1000) := p_filename1;
BEGIN
SELECT xxbns_grm_batch_id_seq.NEXTVAL
INTO g_grm_batch_id
FROM dual;
v_file := utl_file.fopen(location => 'DATA_NOT_RETAIL_INCOME',
filename => v_file_name,
open_mode => 'r',
max_linesize => 32767);
LOOP
BEGIN
utl_file.get_line(v_file, v_datstring);
IF substr(v_datstring, 1, 4) = 'Test' THEN
v_source := substr(v_datstring, 1, 4);
v_acc_date := substr(v_datstring, 5, 6);
v_account := substr(v_datstring, 11, 7);
v_transit := substr(v_datstring, 18, 5);
v_trans_type := substr(v_datstring, 23, 1);
v_amt_type := substr(v_datstring, 24, 1);
v_currency := substr(v_datstring, 25, 3);
v_amount := substr(v_datstring, 28, 27);
v_sign := substr(v_datstring, 55, 1);
END IF;
BEGIN
INSERT INTO XXBNS_GRM_DATA_LOAD
(FILE_NAME,
BATCH_ID,
SOURCE,
ACCOUNTING_DATE,
ACCOUNT,
TRANSIT,
TRANS_TYPE,
AMT_TYPE,
CURRENCY,
AMOUNT,SIGN)
VALUES(v_file_name,
g_grm_batch_id,
v_source,
v_acc_date,
v_account,
v_transit,
v_trans_type,
v_amt_type,
v_currency,
v_amount,
v_sign);
COMMIT;
END;
END LOOP;
v_datstring := NULL;
IF utl_file.is_open(v_file) THEN
utl_file.fclose(v_file);
END IF;
END grm_detail;
专家解答
我认为这与问题有关
https://asktom.oracle.com/pls/apex/f?p=100:11:::NO:RP:P11_QUESTION_ID:9536325800346804830
在这种情况下,改变
过程grm_detail (变量2中的p_filename1)
到
过程grm_detail (VARCHAR2中的p_filename1默认为null)
然后添加一些处理,如果未传递,则可以确定文件名,即,
That way your routine will pick up the right filename by default, but if you ever want 到explicitly process a known file you can also do it.
https://asktom.oracle.com/pls/apex/f?p=100:11:::NO:RP:P11_QUESTION_ID:9536325800346804830
在这种情况下,改变
过程grm_detail (变量2中的p_filename1)
到
过程grm_detail (VARCHAR2中的p_filename1默认为null)
然后添加一些处理,如果未传递,则可以确定文件名,即,
if p_filename1 is null then
select file_name
in到 v_filenae
from external_table_that_does_a_dir_listing
where rownum = 1;
else
v_filename := p_filename1;
end if;
v_file := utl_file.fopen(location => 'DATA_NOT_RETAIL_INCOME',
filename => v_filename,
open_mode => 'r',
max_linesize => 32767);
That way your routine will pick up the right filename by default, but if you ever want 到explicitly process a known file you can also do it.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




