一:将查询结果输出为csv
1).创建表
Create Table TMP(
id number,
lie varchar2(4000)
);
2).在数据库中创建函数
CREATE OR REPLACE FUNCTION FUN_GET_SPOOL_STRING_NAN(P_OWNER VARCHAR2,
P_TABLE VARCHAR2)
RETURN VARCHAR2 AS
/* drop table TMP;
Create Table TMP(
id number,
lie varchar2(4000)
);*/
V_RETURN VARCHAR2(32767);
V_RETURN1 VARCHAR2(32767);
V_RETURN2 VARCHAR2(32767);
V_MAX VARCHAR2(255);
V_TABLE VARCHAR2(255) := UPPER(P_TABLE);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
SELECT COUNT(1)
INTO V_MAX
FROM DBA_TAB_COLS C
WHERE C.TABLE_NAME = V_TABLE
AND C.OWNER = P_OWNER;
---列
SELECT 'SELECT ' || 0 || '||'',' ||
TO_CHAR(WMSYS.WM_CONCAT(DECODE(T.COLUMN_ID,
V_MAX,
'''||''' || T.COLUMN_NAME || '''',
'''||''' || T.COLUMN_NAME ||
'''||''')
)) || ' lie FROM dual a '
INTO V_RETURN1
FROM (SELECT C.COLUMN_NAME, C.COLUMN_ID
FROM DBA_TAB_COLS C
WHERE C.TABLE_NAME = V_TABLE
AND C.OWNER = P_OWNER
ORDER BY C.COLUMN_ID) T;
--表
SELECT 'UNION SELECT replace(replace( ' || 1 || '||'',' ||
TO_CHAR(WMSYS.WM_CONCAT(DECODE(T.COLUMN_ID,
V_MAX,
''' || REPLACE(' || T.COLUMN_NAME ||
','','',''、'')',
''' || REPLACE(' || T.COLUMN_NAME ||
','','',''、'')||'''))) ||
',chr(10),''''),chr(13),'''') from '|| P_OWNER||'.'|| V_TABLE
INTO V_RETURN2
FROM (SELECT C.COLUMN_NAME, C.COLUMN_ID
FROM DBA_TAB_COLS C
WHERE C.TABLE_NAME = V_TABLE
AND C.OWNER = P_OWNER
ORDER BY C.COLUMN_ID) T;
IF LENGTH(V_RETURN2) > 2000 THEN
EXECUTE IMMEDIATE 'truncate table TMP';
INSERT INTO TMP
VALUES
(1, 'SELECT substr(t.lie, 3) FROM (' || V_RETURN1);
INSERT INTO TMP VALUES (2, V_RETURN2 || ') t;');
COMMIT;
V_RETURN := '见表 select * from TMP; ';
ELSE
V_RETURN := 'SELECT substr(t.lie, 3) FROM (' || V_RETURN1 ||
V_RETURN2 || ') t;';
END IF;
RETURN V_RETURN;
END FUN_GET_SPOOL_STRING_NAN;
/
3).编译该函数
4).调用该函数,将查询的用户名,表名传入参数中
select FUN_GET_SPOOL_STRING_LHR('SCOTT','EMP') from dual where rownum <=10;
5).将函数执行结果返回值粘贴在improtcsv.sql文件中
importcsv.sql脚本如下:
set echo on
set trimspool on
set trimout on
set linesize 4000
set pagesize 0
set sqlblanklines on
set feedback off
set serveroutput off
set term off
set echo off
define data_path=/tmp/scritps
col ymd new_value v_ymd
select to_char(sysdate,'YYYYMMDDHH24MISS') ymd FROM dual;
spool &data_path/result_&&v_ymd..csv
SELECT substr(t.lie, 3) FROM (SELECT 0||','||'EMPNO'||','||'ENAME'||','||'JOB'||','||'MGR'||','||'HIREDATE'||','||'SAL'||','||'COMM'||','||'DEPTNO' lie FROM dual a UNION SELECT replace(replace( 1||',' || REPLACE(EMPNO,',','??')||',' || REPLACE(ENAME,',','??')||',' || REPLACE(JOB,',','??')||',' || REPLACE(MGR,',','??')||',' || REPLACE(HIREDATE,',','??')||',' || REPLACE(SAL,',','??')||',' || REPLACE(COMM,',','??')||',' || REPLACE(DEPTNO,',','??'),chr(10),''),chr(13),'') from SCOTT.EMP) t;
spool off
exit
在SQLplus中执行该SQL脚本
下载该文件即可,结果如下:
二:将查询结果输出为html格式
漂亮的表格:
set feedback off
set markup html on;
set markup html on spool on preformat off entmap on -
head ' -
body 'BGCOLOR="#C0C0C0"'
SET MARKUP html TABLE 'WIDTH="100%" border="1" summary="Script output" cellspacing="0px" style="border-collapse:collapse;" '
define data_path=/tmp/scritps/
col ymd new_value v_ymd
select to_char(sysdate,'YYYYMMDDHH24MISS') ymd FROM dual;
spool &data_path/result_html_&&v_ymd..html
select * from scott.emp;
spool off
set markup html off
exit
注意在Linux和Windows上执行命令时对路径的修改
生成结果如下:
三:生成简单的html
set feedback on;
set markup html on;
spool /tmp/scritps
select * from scott.salgrade;
spool off
set markup html off
exit
生成结果如下:
本文仅为整理网络内容
原文地址:http://blog.itpub.net/26736162/viewspace-2149543/