oracel中的表导出csv文件
来源:互联网 发布:java 效率最高的排序 编辑:程序博客网 时间:2024/05/24 02:41
1.定义存储过程
CREATE OR REPLACE PROCEDURE SQL_TO_CSV( P_QUERY IN VARCHAR2, -- PLSQL文 P_DIR IN VARCHAR2, -- 导出的文件放置目录 P_FILENAME IN VARCHAR2 -- CSV名 ) IS L_OUTPUT UTL_FILE.FILE_TYPE; L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR; L_COLUMNVALUE VARCHAR2(4000); L_STATUS INTEGER; L_COLCNT NUMBER := 0; L_SEPARATOR VARCHAR2(1); L_DESCTBL DBMS_SQL.DESC_TAB; P_MAX_LINESIZE NUMBER := 32000;BEGIN --OPEN FILE L_OUTPUT := UTL_FILE.FOPEN(P_DIR, P_FILENAME, 'W', P_MAX_LINESIZE); --DEFINE DATE FORMAT EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS'''; --OPEN CURSOR DBMS_SQL.PARSE(L_THECURSOR, P_QUERY, DBMS_SQL.NATIVE); DBMS_SQL.DESCRIBE_COLUMNS(L_THECURSOR, L_COLCNT, L_DESCTBL); --DUMP TABLE COLUMN NAME FOR I IN 1 .. L_COLCNT LOOP UTL_FILE.PUT(L_OUTPUT,L_SEPARATOR || '"' || L_DESCTBL(I).COL_NAME || '"'); --输出表字段 DBMS_SQL.DEFINE_COLUMN(L_THECURSOR, I, L_COLUMNVALUE, 4000); L_SEPARATOR := ','; END LOOP; UTL_FILE.NEW_LINE(L_OUTPUT); --输出表字段 --EXECUTE THE QUERY STATEMENT L_STATUS := DBMS_SQL.EXECUTE(L_THECURSOR); --DUMP TABLE COLUMN VALUE WHILE (DBMS_SQL.FETCH_ROWS(L_THECURSOR) > 0) LOOP L_SEPARATOR := ''; FOR I IN 1 .. L_COLCNT LOOP DBMS_SQL.COLUMN_VALUE(L_THECURSOR, I, L_COLUMNVALUE); UTL_FILE.PUT(L_OUTPUT, L_SEPARATOR || '"' || TRIM(BOTH ' ' FROM REPLACE(L_COLUMNVALUE, '"', '""')) || '"'); L_SEPARATOR := ','; END LOOP; UTL_FILE.NEW_LINE(L_OUTPUT); END LOOP; --CLOSE CURSOR DBMS_SQL.CLOSE_CURSOR(L_THECURSOR); --CLOSE FILE UTL_FILE.FCLOSE(L_OUTPUT);EXCEPTION WHEN OTHERS THEN RAISE;END;2.指定导出的储存路径
create or replace directory OUT_PATH as '目标路径';
例如sql>create or replace directory OUT_PATH as 'D:\';3.指定当前用户下的表名
通过查询语句查出需要执行的存储过程的语句
SELECT 'EXEC sql_to_csv(''select * from ' ||T.TABLE_NAME ||''',''OUT_PATH''' || ',''ODS_MDS.' || T.TABLE_NAME ||'.csv'');' FROM user_TABLES T where t.TABLE_NAME='表名'例如:
SELECT 'EXEC sql_to_csv(''select * from ' ||T.TABLE_NAME ||''',''OUT_PATH''' || ',''' || T.TABLE_NAME ||'.csv'');' FROM user_TABLES T where t.TABLE_NAME='POSITION_20170912';
EXEC sql_to_csv('select * from POSITION_20170912','OUT_PATH','POSITION_20170912.csv');
4.执行对应的过程语句
SQL> EXEC sql_to_csv('select * from POSITION_20170912','OUT_PATH','POSITION_20170912.csv'); PL/SQL procedure successfully completed
阅读全文
0 0
- oracel中的表导出csv文件
- 导出CSV文件中的乱码
- SQLite表导出csv文件
- oracel导出多个文件
- 批量导出表数据到CSV文件
- csv文件导出
- php导出csv文件
- PHP导出CSV文件
- mysql导出csv文件
- java导出CSV文件
- php导出CSV文件
- C# 导出CSV文件
- mysql 导出csv文件
- csv文件导入导出
- 导出CSV文件
- C# 导出csv文件
- csv文件导入导出
- java导出CSV文件
- Pearson相关系数, Spearman相关系数,Kendall相关系数的区别
- 智能制造新模式应用高级研学班 · 广州站
- c/c++之函数指针
- Unity官方手册翻译之旅---Unity User Manual (2017.1 beta)
- Android 友盟错误分析的用法
- oracel中的表导出csv文件
- 构造Maxtree
- opencv学习——cv2.drawMatches()与cv2.drawMatchesKnn()区别
- 不同的路径
- 打开Charles,提示:您需要安装旧 Java SE 6 运行环境才能打开“Charles”。
- python 标准库
- [杂题] Codeforces #577B. Modulo Sum
- 批量插入之分批事务插入
- [编程题]进制转换