永发信息网

请教oracle百万级表数据导出到excle2007中

答案:2  悬赏:20  手机版
解决时间 2021-02-22 18:00
请教oracle百万级表数据导出到excle2007中
最佳答案
可以使用plsql 导出为csv格式的文件中,再使用excel 2007打开即可。
示例内容:

CREATE OR REPLACE PROCEDURE SQL_TO_CSV2
(
         P_QUERY IN VARCHAR2,                        -- PLSQL文
         P_DIR IN VARCHAR2,                          -- 导出的文件放置目录
         P_FILENAME IN VARCHAR2                      -- CSV名
)
IS
         L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
         L_COLCNT NUMBER := 0;
         L_SEPARATOR VARCHAr2(1) := ',';
         L_DESCTBL DBMS_SQL.DESC_TAB;
         P_MAX_LINESIZE NUMBER := 32000;
         lv_sql VARCHAr2(32000);
BEGIN
         EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYYMMDD HH24:MI:SS''';

lv_sql := '

DECLARE
         L_OUTPUT UTL_FILE.FILE_TYPE;
         L_ROW Varchar2(32000) := NULL;
   CURSOR c IS '||P_QUERY||';
   TYPE tp_rows IS TABLE OF c%ROWTYPE INDEX BY PLS_INTEGER;
   r tp_rows;
BEGIN
         L_OUTPUT := UTL_FILE.FOPEN('''||P_DIR||''', '''||P_FILENAME||'.tmp'', ''W'', '||P_MAX_LINESIZE||');
         OPEN c;

         LOOP
         FETCH c BULK COLLECT INTO r LIMIT 2000;

         FOR i IN 1..r.COUNT LOOP
             L_ROW := ';

         DBMS_SQL.PARSE( L_THECURSOR, P_QUERY, DBMS_SQL.NATIVE );
         DBMS_SQL.DESCRIBE_COLUMNS( L_THECURSOR, L_COLCNT, L_DESCTBL );
         FOR I IN 1 .. L_COLCNT LOOP
             IF i>1 THEN
                lv_sql := lv_sql||'||'''||L_SEPARATOR||'''||';
             END IF;
             lv_sql := lv_sql||'r(i).'||L_DESCTBL(I).COL_NAME;
         END LOOP;
         DBMS_SQL.CLOSE_CURSOR(L_THECURSOR);
         lv_sql := lv_sql||';
             UTL_FILE.put_line(L_OUTPUT,L_ROW);

         END LOOP;
             EXIT WHEN c%NOTFOUND;
         END LOOP;
         CLOSE c;

         UTL_FILE.FCLOSE( L_OUTPUT );
EXCEPTION
         WHEN OTHERS THEN
         UTL_FILE.FCLOSE( L_OUTPUT );
         DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
         RAISE;
END;';

    --DBMS_OUTPUT.PUT_LINE(lv_sql);
    EXECUTE IMMEDIATE lv_sql;

         -- UTL_FILE.fremove(P_DIR,to_char(sysdate,'yyyymmdd_')|| P_FILENAME||'.csv');
         -- UTL_FILE.frename(P_DIR,P_FILENAME||'.tmp',P_DIR,to_char(sysdate,'yyyymmdd_')|| P_FILENAME||'.csv');


END;
/
全部回答
任务占坑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在食品工厂设计中,工艺设计和非工艺设计有何
佳大燕森海商店地址在什么地方,想过去办事
中央财经大学税务硕士(专业硕士)学费是多少
求助,mate9 googleplay服务已禁用怎么解决
京东商城退货好退吗
50的缸养几条地图鱼好
甲公陂怎么去啊,有知道地址的么
【室内设计原理】室内设计的理论依据是什么意
西安新思路生态农业科技发展有限公司地址有知
求类似《封阁女相》的女扮男装的女主文,或女
玫瑰花有几种颜色
我有摩托车驾照现想增驾汽车驾驶证,还要重新
三星厨柜电器怎么去啊,有知道地址的么
天伦药业直营店康和公司德仁堂大药房在什么地
别克林荫大道原车屏升级 导航 倒车影像 电视
推荐资讯
9(x+y+z)2–(x–y–z)2=?
什么是商承贴现
有时突然心跳加速,四肢酸软无力,脚胀是怎么
我想开一家10平方米左右的汉堡小子店,不知开
广东话很喜欢说到“鬼”字吗
求成都办理招商银行信用卡的业务员的电话号码
家先冲地址有知道的么?有点事想过去
虾子能和番茄一起吃吗?
k126 列车时刻表
西边排在什么地方啊,我要过去处理事情
杨福记麻辣烫宁晋店这个地址在什么地方,我要
提到马来西亚你最先想到的是什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?