-1

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

谢谢 :)

4

1 回答 1

4

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

HR.Employees此示例从 Oracle示例表中假脱机一些表。表格如下所示:

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)

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

-- 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脚本顶部的所有命令,以及所有命令都在脚本中的事实 - 如果您尝试直接从 SQL*Plus 命令行执行它们,它们将在假脱机输出中结束。

[编辑] 还有一件事 - SET LINESIZE 2000. 您必须将值设置为大于预期的行大小。它可能会大很多,因为它SET TRIMSPOOL ON会将每条线切成一定的大小。

于 2013-03-15T12:44:29.297 回答