是否可以将多个 Oracle 表假脱机到一个 csv 文件(在不同的工作表中)?我这样,怎么办?
谢谢 :)
以下是如何使用 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
会将每条线切成一定的大小。