PL / SQL将Oracle表假脱机到一个csv文件

时间:2013-03-15 11:59:59

标签: oracle csv plsql

是否可以将多个Oracle表假脱机到一个csv文件(在不同的wooksheets中)? 我是这样,怎么样?

谢谢:)

1 个答案:

答案 0 :(得分:4)

以下是使用SQL * Plus将一个表假脱机到一个CSV的方法。如上所述,每个表/查询都需要一个单独的CSV - 这就是CSV和Excel的工作方式。

此示例假脱机Oracle HR.Employees示例表中的某些表。这是表格的样子:

SQL> desc hr.employees
 Name            Null?    Type
 --------------- -------- -------------
 EMPLOYEE_ID     NOT NULL NUMBER(6)
 FIRST_NAME               VARCHAR2(20)
 LAST_NAME       NOT NULL VARCHAR2(25)
 EMAIL           NOT NULL VARCHAR2(25)
 PHONE_NUMBER             VARCHAR2(20)
 HIRE_DATE       NOT NULL DATE
 JOB_ID          NOT NULL VARCHAR2(10)
 SALARY                   NUMBER(8,2)
 COMMISSION_PCT           NUMBER(2,2)
 MANAGER_ID               NUMBER(6)
 DEPARTMENT_ID            NUMBER(4)

这是一个假脱机部分HR列的SQL脚本。它包括数字,字符和日期值:

-- SpoolEmployeesToCSV.sql
SET ECHO OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
SET PAGESIZE 0
SET LINESIZE 2000
SET FEEDBACK OFF
SPOOL c:\Business\HREmployees.csv

SELECT
  TO_CHAR(Employee_ID) || ',' ||
  '"' || REPLACE(First_Name, '"', '""') || '"' ||
  ',"' || REPLACE(Last_Name, '"', '""') || '",' ||
  ',' || TO_CHAR(Hire_Date, 'MM/DD/YYYY') ||
  ',' || TO_CHAR(Salary)
FROM HR.Employees

SPOOL OFF

此脚本恰好名为SpoolEmployeesToCSV.sql。要从SQL * Plus中调用它,请执行以下操作:

SQL>@SpoolEmployeesToCSV.sql

这就是全部。您可能需要尝试不同的日期和数字格式,但关于假脱机到文件的主要问题是脚本顶部的所有SET命令,以及 all 的事实命令在脚本中 - 如果您尝试直接从SQL * Plus命令行执行它们,它们将最终在假脱机输出中。

[编辑]还有一件事 - SET LINESIZE 2000。您必须将值设置为大于预期的行大小。它可能要大得多,因为SET TRIMSPOOL ON会将每一行都缩小到适当大小。