我是pl sql的新手并尝试读取文件(列式),其中file(abc.txt)的数据由管道“|”分隔如下所示:
first test|add|123
second test|mod|654
所以我的要求就像
工作示例代码将非常有用。
以及用于读取文件的代码:
set serveroutput on;
DECLARE
V1 VARCHAR2(200);
F1 UTL_FILE.FILE_TYPE;
V1 VARCHAR2(200);
F1 UTL_FILE.FILE_TYPE;
BEGIN
F1 := UTL_FILE.FOPEN('USER_DIR','abc.txt','R');
LOOP
BEGIN
UTL_FILE.GET_LINE(F1,V1);
dbms_output.put_line(V1);
EXCEPTION
WHEN no_data_found THEN EXIT;
END;
END LOOP;
IF UTL_FILE.IS_OPEN(F1) THEN
dbms_output.put_line('File is Open');
end if;
UTL_FILE.FCLOSE(F1);
END;
/
答案 0 :(得分:0)
sqlloader
为传入数据创建表
定义您的"加载规则":
Use LOAD DATA
infile '/yourappli/utl_file/abc.txt'
REPLACE
INTO TABLE LOAN_BALANCE_MASTER_INT
fields terminated by '|' optionally enclosed by '"'
(
Col_1,
Col_2,
Col_3
)
以下是如何使用文档链接中声明的 V1
函数在代码中循环分隔字符串 cto_table
:
DECLARE
V1 VARCHAR2(200);
F1 UTL_FILE.FILE_TYPE;
BEGIN
F1 := UTL_FILE.FOPEN('USER_DIR','abc.txt','R');
Loop
BEGIN
UTL_FILE.GET_LINE(F1,V1);
for x in (
select column_value a from table(cto_table('|', V1) )
) loop
dbms_output.put_line(x.a);
end loop;
EXCEPTION WHEN No_Data_Found
THEN EXIT;
END;
end loop;
IF UTL_FILE.IS_OPEN(F1) THEN
dbms_output.put_line('File is Open');
end if;
UTL_FILE.FCLOSE(F1);
END;
/