複数の Oracle テーブルを 1 つの csv ファイル (異なるワークシート内) にスプールすることは可能ですか? 私はどうやって?
ありがとう :)
SQL*Plus を使用して、1 つのテーブルを 1 つの CSV にスプールする方法を次に示します。前述のように、テーブル/クエリごとに個別の CSV が必要です。これが CSV と Excel の仕組みです。
この例では、OracleHR.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
は、スクリプトの先頭にあるすべてのコマンドと、すべてのコマンドがスクリプト内にあるという事実です。それらを SQL*Plus コマンドラインから直接実行すると、最終的にスプールされた出力になります。
[編集] もう 1 つ - SET LINESIZE 2000
. 予想される行サイズよりも大きな値を設定する必要があります。SET TRIMSPOOL ON
は各行をサイズに合わせて切り刻むため、はるかに大きくなる可能性があります。