ヘッダーをスキップ
SQL*Plus®ユーザーズ・ガイドおよびリファレンス
リリース11.2
B56314-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 SQL*Plusの基本

この章では、SQL*Plusの基本的な使用方法について説明します。内容は次のとおりです。

コマンドの入力と実行

特に指定がないかぎり、コマンドの使用方法についての説明はすべてのユーザー・インタフェースに適用できます。

コマンドラインでは、SQL*Plusプロンプトでコマンドを入力し、[Return]を押して実行します。

通常、コマンド内の単語と単語を区切るには、空白かタブを使用します。また、コマンドを読みやすくするために、単語と単語の間に空白またはタブを追加することもできます。

大文字と小文字の区別は、オペレーティング・システムによって異なります。このマニュアルでは、わかりやすくするため、表名、列名およびコマンドをすべて大文字で表記しています。

次に示す3つのタイプのコマンドを入力できます。

コマンドを次の行に続ける方法、コマンドの終了方法、コマンドの実行方法は、入力して実行するコマンドのタイプによって異なります。次の各ページでは、それらのタイプのコマンドを実行する例を示します。

SQLバッファ

SQLバッファには、最後に入力されたSQLコマンドまたはPL/SQLブロック(SQL*Plusコマンドではなく)が格納されます。コマンドやブロックは、次のSQLコマンドまたはPL/SQLブロックに置換されるまでバッファに格納されます。LISTコマンドを使用して、バッファの内容を表示できます。

RUNまたは/(スラッシュ)コマンドを使用して、SQLバッファ内のコマンドまたはブロックを実行できます。RUNを使用すると、バッファ内のコマンドまたはブロックが表示されてから実行されます。/(スラッシュ)を使用すると、バッファ内のコマンドまたはブロックは表示されずに実行されます。バッファ内に格納されたコマンドやブロックの編集については、SQL*Plusコマンドラインでのスクリプトの編集」を参照してください。

SQL*Plusでは、SQL*Plusコマンドまたはコマンドを実行するために入力したセミコロンやスラッシュは、SQLバッファに格納されません。

コマンドの実行

SQL*Plusコマンドラインでは、コマンドを入力し、[Return]キーを押してSQL*Plusにそのコマンドを実行するように指示します。SQL*Plusでコマンドが処理され、別のコマンドに対する準備が整うと、コマンド・プロンプトが再表示されます。

表定義の表示

指定された表またはビューの各列の定義を表示するには、SQL*PlusのDESCRIBEコマンドを使用します。

例4-1 DESCRIBEコマンドの使用

EMP_DETAILS_VIEWというサンプル・ビューの列定義を表示するには、次のように入力します。

DESCRIBE EMP_DETAILS_VIEW
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------
 EMPLOYEE_ID                               NOT NULL NUMBER(6)
 JOB_ID                                    NOT NULL VARCHAR2(10)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
 LOCATION_ID                                        NUMBER(4)
 COUNTRY_ID                                         CHAR(2)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 SALARY                                             NUMBER(8,2)
 COMMISSION_PCT                                     NUMBER(2,2)
 DEPARTMENT_NAME                           NOT NULL VARCHAR2(30)
 JOB_TITLE                                 NOT NULL VARCHAR2(35)
 CITY                                      NOT NULL VARCHAR2(30)
 STATE_PROVINCE                                     VARCHAR2(25)
 COUNTRY_NAME                                       VARCHAR2(40)
 REGION_NAME                                        VARCHAR2(25)


注意:

DESCRIBEは、Oracle Databaseデータ・ディクショナリ内の情報へのアクセスに使用します。SQLのSELECTコマンドを使用すると、データベース内のこれらの情報や他の情報にもアクセスできます。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

PL/SQL定義の表示

ファンクションまたはプロシージャの定義を表示するには、SQL*PlusのDESCRIBEコマンドを使用します。

例4-2 DESCRIBEコマンドの使用

AFUNCというファンクションの定義を作成および表示するには、次のように入力します。

create or replace function afunc (f1 varchar2, f2 number) return number as
begin
   if (length(f1) > f2) then
    return 1;
   else
    return 0;
   end if;
end;
/
FUNCTION created.

DESCRIBE afunc
FUNCTION afunc RETURNS NUMBER
Argument Name   Type     In/Out   Default?
--------------- -------- -------- ---------
F1              VARCHAR2 IN
F2              NUMBER   IN

SQLコマンドの実行

SQLコマンド言語を使用すると、データベース内のデータを操作できます。個々のSQLコマンドについては、『Oracle Database SQL言語リファレンス』を参照してください。

例4-3 SQLコマンドの入力

この例では、SQLコマンドを入力して実行し、各従業員の従業員番号、名前、職種および給与をEMP_DETAILS_VIEWビューに表示します。

  1. コマンド・プロンプトで、コマンドの1行目を次のように入力します。

    SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, SALARY
    

    誤って入力した場合は、[Back Space]を使用して消去し、再度入力します。入力終了後、[Return]を押して次の行へ移動します。

  2. 2行目の入力を求める「2」が表示されます。コマンドの2行目を次のように入力します。

    FROM EMP_DETAILS_VIEW WHERE SALARY > 12000;
    

    セミコロン(;)は、コマンドの終わりを意味します。[Return]を押すか「実行」をクリックします。コマンドが処理され、結果が表示されます。

    EMPLOYEE_ID LAST_NAME                 JOB_ID             SALARY
    ----------- ------------------------- ---------- --------------
            100 King                      AD_PRES           $24,000
            101 Kochhar                   AD_VP             $17,000
            102 De Haan                   AD_VP             $17,000
            145 Russell                   SA_MAN            $14,000
            146 Partners                  SA_MAN            $13,500
            201 Hartstein                 MK_MAN            $13,000
    
    6 rows selected.
    

    結果および取得した行数が表示された後、SQL*Plusコマンドラインに再度コマンド・プロンプトが表示されます。入力に誤りがあって結果が表示されなかった場合は、コマンドを再入力します。

    ヘッダーは、PAGESIZEというシステム変数の設定に応じて、繰り返し出力される場合があります。問合せの結果が、使用可能なページ幅に収まらない場合があります。システム変数LINESIZEを使用して、文字の出力幅を設定できます。「ページ・サイズの設定」を参照してください。通常、LINESIZEはコマンドラインでは80に設定されています。取得したレコード件数を示すメッセージが表示されるかどうかは、システム変数FEEDBACKの設定によって異なります。詳細は、「コマンドの実行に影響するシステム変数」を参照してください。

SQLコマンドの構文について

話し言葉に、単語を組み合せて文にする方法を規定する構文規則があるように、SQL*Plusにも、単語を組み合せてコマンドにする方法を規定する構文規則があります。 このようなコマンドをSQL*Plusで実行するには、それらの規則に従う必要があります。

1つのSQLコマンドを複数行に分割

SQLコマンドは、個々の単語の途中で改行しないかぎり、任意の位置で複数行に分割できます。したがって、例4-3「SQLコマンドの入力」で入力した問合せは、次のように3行で入力できます。

SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID
FROM EMP_DETAILS_VIEW
WHERE SALARY>12000;

このマニュアルでは、ほとんどのSQLコマンドが句に分割されており、1つの句が1行になっています。たとえば、例4-3「SQLコマンドの入力」では、SELECT句とFROM句が個別の行に配置されています。多くの場合、これが最も見やすい方法ですが、コマンドを自分にとって最も読みやすくするためには、どのように行を分割してもかまいません。

SQLコマンドの終了

SQLコマンドは、次に示す3つの方法のいずれかによって終了できます。

  • セミコロン(;)を入力する

  • 1行にスラッシュ(/)のみを1つ入力する

  • 空白行を入力する

セミコロン(;)は、コマンドを実行することをSQL*Plusに通知するために使用します。例4-3「SQLコマンドの入力」に示すように、コマンドの最終行の末尾にセミコロンを入力して、[Return]を押すか「実行」をクリックします。SQL*Plusによって、コマンドが処理され、SQLバッファに格納されます。詳細は、「SQLバッファ」を参照してください。セミコロンを入力する前に誤って[Return]を押した場合は、コマンドの次の行の入力を促す行番号がSQL*Plusプロンプトに表示されます。コマンドを実行するには、セミコロンを入力して、再度[Return]を押すか「実行」をクリックします。

スラッシュ(/)のみの行を使用しても、SQL*Plusにコマンドの実行を指示できます。コマンドの最終行の末尾で[Return]を押します。SQL*Plusプロンプトに次の行の行番号が表示されます。スラッシュを入力し、再度[Return]を押すか「実行」をクリックします。SQL*Plusで、コマンドが実行され、バッファに格納されます。

SQL文またはスクリプト内に空白行を使用すると、コマンド入力の終了後、SQL*Plusでそのコマンドの実行が待機されます。コマンドの最終行の末尾で[Return]を押します。SQL*Plusプロンプトに次の行の行番号が表示されます。


注意:

SET SQLBLANKLINESコマンドを使用して、SQL文内での空白行の表示形式および動作を変更できます。空白行の動作の変更方法の詳細は、「SET」コマンドを参照してください。

このようにコマンドを実行するには、再度[Return]を押して、SQL*Plusのコマンド・プロンプトを表示します。コマンドは、実行されないままSQLバッファに格納されます。詳細は、「SQLバッファ」を参照してください。引き続き別のSQLコマンドを入力すると、バッファ内にある前のコマンドは上書きされます。

PL/SQLブロックの実行

データベース内のデータを操作するためにPL/SQLサブプログラム(ブロック)を使用することもできます。個々のPL/SQL文については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

SQL*Plusでは、SQLコマンドと同じ方法でPL/SQLサブプログラムを処理できますが、セミコロン(;)または空白行でブロックを終了および実行できません。PL/SQLサブプログラムを終了するには、新しい行にピリオド(.)のみを入力します。新しい行にスラッシュ(/)のみを入力しても終了および実行が可能です。

PL/SQL文を入力するためのモードに入る方法は、次のとおりです。

入力したサブプログラムは、SQLバッファに格納されます。RUNコマンドまたはスラッシュ(/)を入力して、現行のサブプログラムを実行します。セミコロン(;)はPL/SQLサブプログラムの一部とみなされるため、コマンドは実行されません。

処理のために(SQLコマンドの場合と同様に)、PL/SQLサブプログラム全体がSQL*PlusからOracle Databaseに送信されます。詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

たとえば、次のようなPL/SQLサブプログラムを入力して実行できます。

DECLARE
    x   NUMBER := 100;
    BEGIN
        FOR i IN 1..10 LOOP
           IF MOD (i, 2) = 0 THEN    --i is even
             INSERT INTO temp VALUES (i, x, 'i is even');
           ELSE
             INSERT INTO temp VALUES (i, x, 'i is odd');
           END IF;
           x := x + 100;
       END LOOP;
   END;
   .
/

ストアド・プロシージャの作成

ストアド・プロシージャは、PL/SQLのファンクション、パッケージまたはプロシージャです。ストアド・プロシージャを作成するには、次のSQLのCREATEコマンドを使用します。

  • CREATE FUNCTION

  • CREATE LIBRARY

  • CREATE PACKAGE

  • CREATE PACKAGE BODY

  • CREATE PROCEDURE

  • CREATE TRIGGER

  • CREATE TYPE

これらのいずれかのコマンドを入力すると、PL/SQLモードに入り、PL/SQLサブプログラムを入力できます。詳細は、「PL/SQLブロックの実行」を参照してください。PL/SQLサブプログラムの入力終了後、ピリオド(.)のみの行を入力してPL/SQLモードを終了します。SQLコマンドを実行し、ストアド・プロシージャを作成するには、RUNまたはスラッシュ(/)を入力する必要があります。セミコロン(;)を入力すると、CREATEコマンドは実行されません。

CREATEコマンドを使用してストアド・プロシージャを作成する場合、コンパイル・エラーが発生するとメッセージが表示されます。それらのエラーを表示するには、SHOW ERRORSを使用します。たとえば、次のように入力します。

SHOW ERRORS PROCEDURE ASSIGNVL

詳細は、「SHOW」を参照してください。

ストアド・プロシージャを参照するPL/SQL文を実行するには、SQL*PlusのEXECUTEコマンドを使用します。EXECUTEは、このコマンドの直後に入力されたPL/SQL文を実行します。たとえば、次のように入力します。

EXECUTE EMPLOYEE_MANAGEMENT.NEW_EMP('BLAKE')

詳細は、「EXECUTE」を参照してください。

SQL*Plusコマンドの実行

SQL*Plusコマンドを使用して、SQLコマンドおよびPL/SQLブロックを操作し、問合せ結果の書式を設定して出力できます。SQL*Plusでは、SQL*PlusコマンドはSQLコマンドやPL/SQLブロックとは異なる方法で処理されます。

コマンド入力を簡略化するために、多くのSQL*Plusコマンドで略称を使用できます。すべてのSQL*Plusコマンドの情報および略称については、「SQL*Plusコマンド・リファレンス」を参照してください。

例4-4 SQL*Plusコマンドの入力

この例では、SQL*Plusコマンドを入力して、サンプル・ビューEMP_DETAILS_VIEWのSALARY列の表示に使用する書式を変更する方法を示します。

  1. 次のSQL*Plusコマンドを入力します。

    COLUMN SALARY FORMAT $99,999 HEADING 'MONTHLY SALARY'
    

    誤って入力した場合は、[Back Space]を使用して消去し、再度入力します。行の入力が終了したら、[Return]を押します。SQL*Plusで新しい書式が認識され、SQL*Plusコマンド・プロンプトが再度表示されて、新しいコマンドを入力できる状態になります。

  2. 次の問合せを入力し、[Return]を押して実行します。

    SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, SALARY
    FROM EMP_DETAILS_VIEW WHERE SALARY > 12000;
    
    EMPLOYEE_ID LAST_NAME                 JOB_ID     MONTHLY SALARY
    ----------- ------------------------- ---------- --------------
            100 King                      AD_PRES           $24,000
            101 Kochhar                   AD_VP             $17,000
            102 De Haan                   AD_VP             $17,000
            145 Russell                   SA_MAN            $14,000
            146 Partners                  SA_MAN            $13,500
            201 Hartstein                 MK_MAN            $13,000
    
    6 rows selected.
    

COLUMNコマンドによって、SALARY列がドル記号($)およびカンマ(,)を使用する書式に設定され、新しいヘッダーが付けられます。

SQL*Plusコマンドの構文について

SQL*Plusコマンドの構文は、SQLコマンドまたはPL/SQLブロックとは異なります。

SQL*Plusコマンドは、必ずしもセミコロンで終了する必要はありません。コマンドの入力終了後、[Return]を押すか「実行」をクリックします。SQL*Plusコマンドは、必ずしもセミコロンで終了する必要はありません。

長いSQL*Plusコマンドを次の行に続ける方法

長いSQL*Plusコマンドは、行末にハイフン(-)を付けて[Return]を押すと、次の行に続けて入力できます。必要な場合は、ハイフンの前に空白も入力できます。SQL*Plusでは、右山カッコ(>)が次の行のプロンプトとして表示されます。

たとえば、次のように入力します。

COLUMN SALARY FORMAT $99,999 -
HEADING 'MONTHLY SALARY'

SQL*Plusでは、ハイフンは継続文字として識別されるため、SQL文内でハイフンを入力すると無視されます。SQL*Plusでは、入力処理で行が結合された後にハイフンが削除されるまで、その文はSQL文として識別されません。たとえば、次のように入力します。

SELECT 200 -
100 FROM DUAL;

次のエラーが戻されます。

SELECT 200 100 FROM DUAL
           *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

文が正しく解釈されるように、最初の行の末尾から2行目の先頭へハイフンを移動させます。

コマンドの実行に影響するシステム変数

SQL*PlusのSETコマンドを使用して、SET変数またはシステム変数と呼ばれる多くの変数を指定できます。SET変数およびシステム変数は、SQL*Plusコマンドの実行方法に影響します。システム変数には、出力のデフォルトの列幅、コマンドによって選択されたレコード数の表示、ページ・サイズなどのSQL*Plus内の様々な条件を指定できます。

このマニュアルの例は、システム変数をデフォルトの設定にしてSQL*Plusを実行することを前提としています。システム変数の設定によっては、例に示す出力とは少し異なる出力が表示される場合があります。(コンピュータにSQL*PlusのLOGINファイルが存在する場合は、デフォルトの設定と異なる可能性があります。)

システム変数およびそれらのデフォルト設定の詳細は、「SET」コマンドを参照してください。SQL*PlusのLOGINファイルの詳細は、「SQL*Plusの構成」および「SQLPLUSプログラムの構文」を参照してください。

システム変数の現行の設定を表示するには、SHOWを入力し、その後に変数名を入力します。SHOWを使用して表示できるその他の項目の詳細は、「SHOW」コマンドを参照してください。

実行中のコマンドの停止

50ページのレポートの1ページ目を表示した後、残りのページは表示の必要がないと判断したとします。この場合は、「取消」を押します。通常、システムの割込み文字は、[Ctrl]+[C]です。SQL*Plusは表示を停止します。


注意:

「取消」を押しても、SQL*PlusのSPOOLコマンドのOUT句でプリンタに送信したファイルの出力は停止しません。(問合せ結果の出力については、「SQL*Plusレポートの書式設定」を参照してください。)ファイルの出力は、オペレーティング・システムから停止できます。詳細は、ご使用のオペレーティング・システム固有のインストレーション・ガイドおよび管理者リファレンスを参照してください。

オペレーティング・システムのコマンドの実行

SQL*Plusのコマンド・プロンプトからオペレーティング・システムのコマンドを実行できます。このコマンドは、既存のオペレーティング・システム・ファイルの表示などの作業を実行する場合に有効です。

オペレーティング・システムのコマンドを実行するには、SQL*PlusのHOSTコマンドに続けて、オペレーティング・システムのコマンドを入力します。たとえば、SQL*Plusコマンドで、次のDIRECTORY *.SQLコマンドを実行できます。

HOST DIRECTORY *.SQL

コマンドの実行が終わると、再度SQL*Plusのコマンド・プロンプトが表示されます。


注意:

HOSTコマンドを使用してSQL*Plusセッションから入力したオペレーティング・システムのコマンドは、現行のSQL*Plusセッションに影響を与えません。たとえば、オペレーティング・システムの環境変数を設定しても、現行のSQL*Plusセッションには影響を与えませんが、引き続き起動されるSQL*Plusセッションに影響を与える可能性があります。

HOSTコマンドへのアクセスを使用禁止にできます。HOSTコマンドを使用禁止にする方法の詳細は、「SQL*Plusのセキュリティ」を参照してください。


表示の一時停止

PAUSEシステム変数を使用すると、長いレポートまたは列数が多い表の定義の表示中、各ページごとに停止させて画面の内容を詳しく調べることができます。

SET PAUSEを使用して、問合せまたはレポートの各画面の表示後に出力を一時停止できます。詳細は、「SET PAU[SE] {ON | OFF | text}」を参照してください。

データベースへの変更の自動保存

SQLのデータ操作言語(DML)コマンド(UPDATE、INSERTおよびDELETE)を使用して、データベース内に格納されている情報に対して行う変更を指定できます。これらのコマンドは、単独かPL/SQLブロック内で使用できます。それらの変更は、SQLのCOMMITコマンド、データ制御言語(DCL)またはデータ定義言語(DDL)コマンド(CREATE TABLEなど)を入力するか、自動コミット機能を使用するまで確定されません。SQL*Plusの自動コミット機能は、指定した数のSQL DMLトランザクションが成功した後に、保留中の変更をコミットします(SQL DMLトランザクションとは、UPDATE、INSERT、DELETEのいずれかのコマンドまたはPL/SQLブロックのことです)。

自動コミット機能は、SQL*PlusのAUTOCOMMITシステム変数で指定します。AUTOCOMMITの設定にかかわらず、変更はSQL*Plusが正常に終了するとコミットされます。

例4-5 自動コミット機能をONにする方法

自動コミット機能をONにするには、次のように入力します。

SET AUTOCOMMIT ON

次のように入力することもできます。

SET AUTOCOMMIT IMMEDIATE

AUTOCOMMITの設定を変更するまで、データベースへの変更を指定するSQLの各DMLコマンドからの変更は、SQL*Plusで自動的にコミットされます。SQL*Plusでは、自動コミットを実行するたびに次のメッセージが表示されます。

COMMIT COMPLETE

自動コミット機能をONにした場合は、データベースへの変更をロールバックできません。

SQLのDMLコマンドを、一定の回数(たとえば、10回)実行した後にデータベースへの変更をコミットする場合は、次のように入力します。

SET AUTOCOMMIT 10

SQL*Plusでは、SQLのDMLコマンドが実行されるたびにカウントされ、10コマンドごとに変更がコミットされます。


注意:

この機能では、ブロックに含まれているSQLコマンドの実際の数には関係なく、1つのPL/SQLブロックが1つのトランザクションとみなされます。

自動コミット機能を再度OFFにするには、次のコマンドを入力します。

SET AUTOCOMMIT OFF

AUTOCOMMITがOFFに設定されたことを確認するには、次の形式でSHOWコマンドを入力します。

SHOW AUTOCOMMIT
AUTOCOMMIT OFF

詳細は、「SET AUTO[COMMIT]{ON | OFF | IMM[EDIATE] | n}」を参照してください。

エラー・メッセージの解釈

SQL*Plusでコマンド内にエラーが検出された場合は、エラー・メッセージが表示されます。 SQL*Plusエラー・メッセージのリストについては、「SQL*Plusのエラー・メッセージ」を参照してください。

例4-6 エラー・メッセージの解釈

次のように入力して、存在しないファイルまたは使用可能でないファイルを実行しようとしたとします。

START EMPLYYES.SQL

次のエラー・メッセージは、表が存在しないことを示します。

SP2-0310: unable to open file "emplyyes.sql"

多くの場合、メッセージを読むだけで問題の修正方法がわかります。詳しい説明が必要な場合は、問題の原因および修正方法を判断するため、次のいずれかの手順を実行します。

エラー・メッセージに番号が付いていない場合は、エラーとなったコマンドの正しい構文を検索するため、SQL*Plusコマンドについては「SQL*Plusコマンド・リファレンス」、SQLコマンドについては『Oracle Database SQL言語リファレンス』、PL/SQLブロックについては『Oracle Database PL/SQL言語リファレンス』を参照してください。それ以外の場合は、DBAに問い合せてください。