博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UTL_FILE包的简单例子
阅读量:2428 次
发布时间:2019-05-10

本文共 2003 字,大约阅读时间需要 6 分钟。

看了yangtingkun的这个帖子,我做了一下改进,加入了域分隔符和行结尾符

GRANT READ[,WRITE] ON DIRECTORY directory TO username;

)

SQL> CREATE DIRECTORY D_OUTPUT AS 'E:';

目录已创建。

CREATE OR REPLACE PROCEDURE P_WRITE_FILE

(
P_TABLE_NAME IN VARCHAR2,
P_COLUMN_LIST IN VARCHAR2 DEFAULT NULL,
P_WHERE_STR IN VARCHAR2 DEFAULT NULL,
P_SEP IN VARCHAR2, --域分隔符
P_END IN VARCHAR2 --行结尾符
) AS
V_FILE UTL_FILE.FILE_TYPE;
V_BUFFER VARCHAR2(32767);
V_RESULT VARCHAR2(32767);
C_RESULT SYS_REFCURSOR;

--c_a char(1);

BEGIN
V_FILE := UTL_FILE.FOPEN('D_OUTPUT', P_TABLE_NAME || TO_CHAR(SYSDATE, 'YYYY_MM_DD') || '.csv','w', 32767);
IF P_COLUMN_LIST IS NULL THEN
FOR C_COLUMN IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = upper(P_TABLE_NAME)) LOOP
V_BUFFER := V_BUFFER || C_COLUMN.COLUMN_NAME || ',';
END LOOP;
V_BUFFER := RTRIM(V_BUFFER, ',');
ELSE
V_BUFFER := P_COLUMN_LIST;
END IF;
UTL_FILE.PUT_LINE(V_FILE, V_BUFFER);
--V_BUFFER := REPLACE(V_BUFFER, ',', '|| ''","'' ||');
V_BUFFER := REPLACE(V_BUFFER, ',', '|| '','' ||');
V_BUFFER := REPLACE(V_BUFFER, ',', P_SEP);
--V_BUFFER := V_BUFFER ||'||'||''''||P_END||''''||' ';
if P_END is not null then
V_BUFFER := V_BUFFER||'||'''||P_SEP ||P_END||'''';
end if;
--dbms_output.enable(1000000);
dbms_output.put_line(substr(V_BUFFER,1,255));
dbms_output.put_line(substr(V_BUFFER,length(V_BUFFER)-255,255));
--V_BUFFER := 'SELECT ''"'' ||' || V_BUFFER || '||''"'' RESULT FROM ' || P_TABLE_NAME;
V_BUFFER := 'SELECT '||V_BUFFER||' RESULT FROM ' || P_TABLE_NAME;
IF P_WHERE_STR IS NOT NULL THEN
IF SUBSTR(LTRIM(P_WHERE_STR), 1, 5) != 'WHERE' THEN
V_BUFFER := V_BUFFER || ' WHERE';
END IF;
V_BUFFER := V_BUFFER || ' ' || P_WHERE_STR;
END IF;
OPEN C_RESULT FOR V_BUFFER;
LOOP
FETCH C_RESULT INTO V_RESULT;
EXIT WHEN C_RESULT%NOTFOUND;
UTL_FILE.PUT_LINE(V_FILE, V_RESULT);
END LOOP;
UTL_FILE.FCLOSE(V_FILE);
END;

用这个就可以用sqlldr倒入数据或者可以倒入到别的数据库了!!

ref:
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7916042/viewspace-889352/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7916042/viewspace-889352/

你可能感兴趣的文章
Kubectl 客户端的下载和配置
查看>>
【转】使用AWS、Docker与Rancher提供弹性的生产级服务
查看>>
Rancher 中默认运行一个nginx 服务(1个容器),为什么在主机端无法访问该服务?
查看>>
Rancher 中应用、服务、容器的概念
查看>>
使用Rancher创建负载均衡的容器应用
查看>>
Ubuntu 16.04 执行 apt update 更新时报错的解决办法
查看>>
【转】Rancher部署Træfik实现微服务的快速发现
查看>>
Ubuntu 16.04 Linux系统内核升级方法
查看>>
使用Rancher部署K8S时需要注意的软件版本问题
查看>>
Ubuntu 16.04系统下 Docker 的卸载与安装
查看>>
清除已运行过Rancher和K8S的主机上的环境数据
查看>>
Ubuntu 中apt update和upgrade 的区别
查看>>
Ubuntu 16.04系统上NFS的安装与使用
查看>>
在Rancher中使用NFS,实现容器跨主机共享数据
查看>>
Linux下查看版本、CPU、内存、磁盘、Swap、网络等资源的使用情况
查看>>
以容器的方式运行GitLab
查看>>
Rancher的优点及不足
查看>>
【转】Harbor 私有仓库简单部署
查看>>
【转】Rancher 下通过vxlan 网络进行 K8S 1.6.6的部署
查看>>
通过Rancher部署K8S后dashboard面板无法进入的解决办法
查看>>