用sqlldr导进数据时,需要编写CTL文件,如果有多个数据文件,我们手动去编写CTL文件,就很费事,那么我们可以通过数据动态生成CTL文件。
1、
----创建目录
---创建目录需要用管理员的权限,用sys用户
create or replace directory BLOB_FILE_DIR as 'D:\CTL';--windows系统路径
select * from dba_directories; ----查看是否生成目录成功
注:在系统的D盘下如果没有生成文件夹CTL,需要手动建文件夹,否则 运行时会报错。
---授权
grant read,write on directory BLOB_FILE_DIR to gzj;--路径授权,添加对路径读、写权限
grant execute on utl_file to gzj;--utl_file包授权,添加执行权限
-----将CTL文本输出成单个文件
----利用游标
declare
vc_table_name varchar2(4000);
vc_filename UTL_FILE.FILE_TYPE;
vc_get_ctltext clob;
cursor cur_yx_ctltext is
select ctltable_name ,ctl_text from TB_YX_CTL;
begin
for i in cur_yx_ctltext loop
vc_table_name:='O_GMM_PMS_GL_'||i.ctltable_name; ------文件名称
vc_get_ctltext:=i.ctl_text; -------文本内容
---dbms_output.put_line(vc_table_name);
vc_filename:= UTL_FILE.FOPEN('BLOB_FILE_DIR', vc_table_name||'.ctl' , 'w'); ---打开路径,文件写进内容
UTL_FILE.PUT_LINE(vc_filename,vc_get_ctltext);
UTL_FILE.FCLOSE(vc_filename);
end loop;
end ;