-1

複数の Oracle テーブルを 1 つの csv ファイル (異なるワークシート内) にスプールすることは可能ですか? 私はどうやって?

ありがとう :)

4

1 に答える 1

4

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は各行をサイズに合わせて切り刻むため、はるかに大きくなる可能性があります。

于 2013-03-15T12:44:29.297 に答える