是否可以将多个Oracle表假脱机到一个csv文件(在不同的wooksheets中)? 我是这样,怎么样?
谢谢:)
答案 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
会将每一行都缩小到适当大小。