ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


SELECT文: シングルトン選択

結果表を指定します。結果表は、選択式によって指定された条件を満たしている、1つ以上の表またはビューの列と行から導出された値の中間表です。これらの列と行が属する表またはビューは、SELECT文のFROM句で識別されます。

SELECT文の基本要素を選択式と呼びます。選択式の詳細は、第2.8.1項を参照してください。

ホスト言語プログラムの結果表の行を取得するには、DECLARE CURSOR文を使用するか、またはシングルトン選択と呼ばれる特殊な形式のSELECT文を使用する必要があります。シングルトン選択文は、1行の結果表を指定します。この文は、プリコンパイルされたプログラムで使用するか、またはSQLモジュールのプロシージャの一部として使用できます。シングルトン選択では、プログラムのホスト言語変数に行の値を割り当てる付加的なINTO句が含まれます。

SELECT文の一般形式の詳細は、「SELECT文: 一般形式」を参照してください。


環境

シングルトン選択文は次の環境で使用できます。


形式






引数

INTO parameter

INTO qualified-parameter

INTO variable

パラメータ、修飾されたパラメータ(構造体)または変数のリストを指定して、1行の結果表の列の値を受け取ります。指定された変数は、ホスト・プログラムで宣言されている必要があります。リストで指定された変数がホスト構造体の場合、SQLは、その参照をホスト構造体の各要素への参照とみなします。

明示的に指定された、またはホスト構造体への参照によって指定された変数の数が結果表の行の値の数と一致しない場合、SQLは、プログラムのプリコンパイル時またはSQLモジュール・ファイルのコンパイル時にエラーを生成します。

シングルトン選択による結果表の列にNULL値が含まれる場合は、対応するパラメータでインジケータ・パラメータを含む必要があります。

select-list

選択リストの詳細は、第2.8.1項を参照してください。

使用方法


SET文

SQLターミナル・セッションの特性を変更します。次の内容を制御できます。


環境

これらのSET文は、対話型SQLでのみ使用できます。

形式









引数

CONTINUE CHARACTER

対話型SQLの継続文字を定義します。ほとんど使用されない文字を選択することにより、データベース管理者は、マイナス記号に関する問題を回避してスクリプトで継続文字を使用できます。

CURRENCY SIGN currency-char

出力で表示する通貨インジケータを指定します。(列に対してドル記号($)の編集文字列を指定すると、SQLは出力で通貨インジケータを作成します。編集文字列の詳細は、第2.5.2項を参照してください。)

代替文字を指定しない場合、デフォルトはドル記号($)または論理名SYS$CURRENCYで指定された値です。

DATE date-number

日付値の表示書式を指定します。

date-number引数には数値を入力する必要があります。この数値は、OpenVMSランタイム・ライブラリのドキュメントの表にリストされている日付書式の論理名の数値に対応します。

たとえば、LIB$DATE_FORMAT_006はこの表の論理名の1つです。この論理名で指定される書式では、1957年5月8日は8 May 57と表示されます。論理名の後半部分には数値006が表示されます。

SET DATE FORMAT文を使用して8 May 57の書式を指定するには、LIB$DATE_FORMAT_006論理名の数値部分の6を使用します。数値に含まれる先行ゼロの入力は不要です。

日付書式を指定しない場合、デフォルトはdd-mmm-yyyyです。

DATE FORMAT

日付値または時間値、あるいはその両方の表示書式を指定します。

SET DATE FORMAT文のDATEとTIMEの部分には数値引数を指定する必要があります。この数値引数は、特定のOpenVMSランタイム・ライブラリ形式の数値部分と同じです。これらの形式は、OpenVMSランタイム・ライブラリのドキュメントに記載されています。(この文は、OpenVMS形式の日時の論理名を参照する数値のみを受け入れます。ANSI/ISOの日時のデータ型はサポートしていません。)

SET DATE FORMAT DATE文とSET DATE FORMAT TIME文は、日付書式または時刻書式の出力のみを変更します。入力書式を変更する場合は、論理名LIB$DT_INPUT_FORMATを使用します。デフォルト以外の入力書式または出力書式にランタイム・ライブラリの日時ルーチンを使用する前に、コマンド・プロシージャSYS$MANAGER:LIB$DT_STARTUP.COMを実行する必要があります。LIB$DT_STARTUP.COMプロシージャでは、英語以外の言語による日時要素のスペルも定義されます。LIB$DT_INPUT_FORMATの詳細は、OpenVMSランタイム・ライブラリのドキュメントを参照してください。

DICTIONARY path-name

デフォルトのリポジトリ・パス名を指定したパス名に変更します。

DIGIT SEPARATOR digit-sep-char

桁セパレータを表示する出力を指定の文字に変更します。桁セパレータは、999を超える値を3桁のグループに分離する記号です。たとえば、数値1,000ではカンマが桁セパレータです。

(列に対してカンマ(,)の編集文字列を指定すると、SQLは出力で桁セパレータを作成します。編集文字列の詳細は、第2.5.2項を参照してください。)

digit-sep-char引数は、一重引用符で囲む必要があります。

代替文字を指定しない場合、デフォルトはカンマ(,)または論理名SYS$DIGIT_SEPで指定された値です。

EDIT

引数としてワイルドカードを指定したEDIT文の使用時に作成する編集バッファのサイズを制御します。

EXECUTE

NOEXECUTE

NO EXECUTE

対話型SQLセッションで発行したデータ操作文を実行するかどうかをSQLに指示します。データベースに対して文を発行する前に、NOEXECUTEオプションを使用して構文が正しいことをチェックする方法は、例を参照してください。

SET FLAGSとともにNOEXECUTEオプションを使用すると、問合せに関連する推定コストとアクセス計画を調べることができます。SET NOEXECUTEを指定すると、問合せを実行せずにアクセス計画が表示されます。NO EXECUTEと2語で指定することもできます。この場合もNOEXECUTEと同じ意味です。

EXECUTEまたはNOEXECUTEを指定しない場合、デフォルトはEXECUTEです。

SET NO EXECUTEがアクティブな場合、SET TRANSACTION文は実行されません。SET NO EXECUTEを使用する前にトランザクションを開始または宣言してください。

FLAGGER OFF

事前に設定されている、非標準構文を表すフラガーをすべて無効にします。これはデフォルトです。

FLAGGER ON

FLAGGER SQL89

FLAGGER SQL92_ENTRY

FLAGGER MIA

非標準構文、つまりANSI/ISO規格またはMIA規格の拡張機能の構文であることを示す情報メッセージの出力を制御します。

SET FLAGGER ONを指定するとSET FLAGGER SQL92_ENTRY ONを指定した場合に相当し、以降にANSI/ISO規格の拡張機能の構文を含む対話型SQL文を発行すると、情報メッセージが表示されます。

SET FLAGGER MIA ONを指定した場合、以降にMIA規格の拡張機能の構文を含む対話型SQL文を発行すると、情報メッセージが表示されます。

フラガーは相互に独立しており、任意の組合せを一度に設定できます。

フラガーを明示的にオンにしない場合は、FLAGGER OFFがデフォルトで設定されます。

LANGUAGE language-name

日時の入力と表示における月の名前および略称の変換に使用する言語を指定します。language-name引数によって、日付リテラルのYESTERDAY、TODAYおよびTOMORROWの変換など、他の言語依存テキストの変換も設定されます。

言語を指定しない場合、デフォルトは論理名SYS$LANGUAGEで指定されている言語です。別の言語のスペルを必要とする場合は、SYS$LANGUAGEに加えて論理名SYS$LANGUAGESを定義する必要があります。SYS$LANGUAGESを定義した後にコマンド・プロシージャSYS$MANAGER:LIB$DT_STARTUP.COMを実行する必要があります。次に例を示します。


$ DEFINE SYS$LANGUAGES FRENCH, GERMAN, SPANISH
$ RUN SYS$MANAGER:LIB$DT_STARTUP.COM
$ SHOW LOGICAL SYS$LANGUAGES
   "SYS$LANGUAGES" = "FRENCH" (LNM$SYSTEM_TABLE)
        = "GERMAN"
        = "SPANISH"
$ SHOW LOGICAL SYS$LANGUAGE
  "SYS$LANGUAGE" = "ENGLISH" (LNM$SYSTEM_TABLE)

SYS$LANGUAGESを定義しない場合、すべての変換ルーチンのデフォルトは英語です。LIB$DT_STARTUP.COMの詳細は、OpenVMSランタイム・ライブラリのドキュメントを参照してください。

SET LANGUAGE文は、データのソートと比較に使用される照合順番には影響しません。CREATE COLLATING SEQUENCE文は、代替の照合順番を指定します。

LINE LENGTH n

SQL出力における代替の行の長さを指定します。

数値nを入力して行の長さを指定する必要があります。数値nには、65535オクテットまでの任意の数を指定できます。

SET LINE LENGTH文を使用すると、ファイルまたは代替出力デバイスに送信する出力の代替幅を指定できます。

NOOUTPUT

出力ファイルへの書込みを一時停止します。

NOVERIFY

間接コマンド・ファイルは表示しません。デフォルト設定は、DCLコマンドで現在有効な設定です。DCL設定を明示的にVERIFYに変更していない場合、デフォルトはNOVERIFYです。

OUTPUT file-spec

出力のターゲット・ファイルを指定します。デフォルトのファイル拡張子は.lisです。

ファイル名とともにOUTPUTを指定すると、SQLは、ユーザー指定のログ・ファイルにその出力を書き込みます。このログ・ファイルには、文と結果の両方が含まれます。SET OUTPUT文を発行すると、標準出力(通常は端末)にも出力が書き込まれます。

ファイル名なしでOUTPUTを指定すると、SQLは、ログ・ファイルへの出力の書込みを一時停止して(存在する場合)、標準出力に出力を書き込みます。つまり、ファイル名のないSET OUTPUT文はSET NOOUTPUT文に相当します。

SQLでは、特定の項目(SHOW文で作成されたヘッダーなど)が端末画面にボールド体で表示されます。ただし、ログ・ファイルでは、このボールド体の項目はエスケープ文字で囲まれます。これらのエスケープ文字は無視できます。ログ・ファイルから削除するか、またはSQLがボールド体で文字を表示しないように端末を設定できます。

次のDCLコマンドを使用してボールド体を無効にすると、エスケープ文字はログ・ファイルに含まれなくなります。


$ SET TERM/NOANSI_CRT

PAGE LENGTH n

SQLヘルプのページのサイズを設定します。

PAGE LENGTH句については、次の点に注意します。

RADIX POINT radix-char

小数点を表示する出力を指定の文字に変更します。小数点は、数値を小数部分から区別する記号です。たとえば、数値98.6ではピリオドが小数点になります。

radix-char引数は、一重引用符で囲む必要があります。

代替文字を指定しない場合、デフォルトはピリオド(.)か、論理名SYS$RADIX_POINTで指定された値です。

sql-plus-options

これらの文は、Oracle Rdbに対して実行されるSQL*Plusスクリプトで使用できます。

表6-13 サポートされているSQL*PlusのSET文
SQL*Plusコマンド 同義のOracle Rdb文
SET ECHO ON SET VERIFY
SET ECHO OFF SET NOVERIFY
SET HEADING ON SET DISPLAY QUERY HEADER
SET HEADING OFF SET DISPLAY NO QUERY HEADER
SET FEEDBACK ON SET DISPLAY ROW COUNTER
SET FEEDBACK OFF SET DISPLAY NO ROW COUNTER
SET NULL SET DISPLAY DEFAULT NULL STRING
SET NULL 'literal' SET DISPLAY NULL STRING 'literal'

TIME time-number

時間値の表示書式を指定します。

time-number引数には数値を入力する必要があります。この数値は、OpenVMSランタイム・ライブラリのドキュメントの表にリストされている時刻書式の論理名の数値に対応します。

たとえば、この表には論理名LIB$TIME_FORMAT_020が含まれています。この論理名で指定される書式では、1日の8時間4分32秒は8 h 4 min 32 sと表示されます。論理名の後半部分には数値020が表示されます。

SQL SET DATE FORMAT TIME文で8 h 4 min 32 sの書式を指定するには、LIB$TIME_FORMAT_020論理名の数値部分の20を使用します。数値に含まれる先行ゼロの入力は不要です。

時刻書式を指定しない場合、デフォルトはhh:mm:ss.ccです。

VERIFY

間接コマンド・ファイルの実行時にこのファイルを端末に表示します。

WARNING DEPRECATE

WARNING NODEPRECATE

廃止されたSQL構文を含む文を発行したときに、対話型SQLで診断メッセージを表示するかどうかを指定します。廃止予定の構文または廃止された構文とは、SQLの以前のバージョンでは使用可能だったがその後変更された構文のことです。このような構文は、将来のバージョンではサポートされない可能性があるため、使用しないことをお薦めします。デフォルトでは、廃止された構文を含む文の発行後に警告メッセージが表示されます(SET WARNING DEPRECATE)。

SET WARNING NODEPRECATEを指定すると、廃止された構文に関するメッセージは表示されません。


使用方法


例1: SET文を使用したターミナル・セッションの特性の設定

SET文を次のように使用すると、ターミナル・セッションの特性を設定できます。


SQL> --
SQL> -- You can put the SET statements in your sqlini file, which sets up
SQL> -- your SQL session.
SQL> --
SQL> SET OUTPUT 'LOG.LIS'
SQL> SET DICTIONARY 'CDD$TOP.DEPT3'
SQL> SET EDIT KEEP 10
SQL> --
SQL> ATTACH 'ALIAS PERS FILENAME personnel';
SQL> SHOW ALIAS
Alias PERS:
    Rdb database in file personnel
SQL> EXIT

この例では、SET文は次のように特性を設定します。

例2: SET CURRENCY SIGN文およびSET DIGIT SEPARATOR文

次の例は、SET DIGIT SEPARATOR文を使用して、編集文字列で使用された場合のSET CURRENCY SIGN文およびSET DIGIT SEPARATOR文の動作を示しています。


SQL> --
SQL> -- This example shows the edit string 'ZZZ,ZZZ',
SQL> -- which specifies the comma as the default digit separator.
SQL> --
SQL> ALTER TABLE SALARY_HISTORY -
cont> ALTER SALARY_AMOUNT EDIT STRING 'ZZZ,ZZZ';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
 SALARY_AMOUNT
        26,291
        51,712
        26,291
        50,000
        .
        .
        .
SQL> --
SQL> -- Now use the SET DIGIT SEPARATOR statement to specify that
SQL> -- the period will be the digit separator instead of
SQL> -- the comma.
SQL> --
SQL> SET DIGIT SEPARATOR '.'
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
 SALARY_AMOUNT
        26.291
        51.712
        26.291
        50.000
   .
   .
   .

例3: SET文の国際化機能の使用

次の例は、様々なSET文を使用してアプリケーションを国際化する方法を示しています。


SQL> --
SQL> -- This first statement specifies the dollar sign
SQL> -- as the currency indicator. It does this by using
SQL> -- the edit string '$(9).99'.
SQL> --
SQL> ALTER TABLE SALARY_HISTORY -
cont> ALTER SALARY_AMOUNT EDIT STRING '$(9).99';
cont> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
  SALARY_AMOUNT
     $26291.00
     $51712.00
     $26291.00
     $50000.00
        .
        .
        .
SQL> --
SQL> -- The SET CURRENCY statement now changes the currency
SQL> -- indicator to the British pound sign, £.  Notice
SQL> -- the changed output.
SQL> --
SQL> SET CURRENCY SIGN '£'
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
 SALARY_AMOUNT
     £26291.00
     £51712.00
     £26291.00
     £50000.00
     £11676.00
        .
        .
        .
SQL> --
SQL> -- The next examples show the SET DATE FORMAT statement.
SQL> --
SQL> -- The SET DATE FORMAT statement will not override input
SQL> -- and output formats that you have specified with an edit
SQL> -- string.  The following SET DATE FORMAT examples use the
SQL> -- SALARY_START and SALARY_END columns.  The SALARY_START
SQL> -- and SALARY_END columns are defined by the domain
SQL> -- DATE_DOM, which uses the edit string 'DD-MMM-YYY'.
SQL> -- Thus, to test the SET DATE FORMAT statement, you must
SQL> -- first remove the edit string from the DATE_DOM domain
SQL> -- using the following ALTER DOMAIN statement:
SQL> --
SQL> ALTER DOMAIN DATE_DOM NO EDIT STRING;
SQL> --
SQL> -- The next statement inserts a row with time information.
SQL> -- The subsequent SET DATE FORMAT statements will use this row:
SQL> --
SQL> INSERT INTO SALARY_HISTORY
cont> -- list of columns:
cont> (EMPLOYEE_ID,
cont> SALARY_AMOUNT,
cont> SALARY_START,
cont> SALARY_END)
cont> VALUES
cont>  -- list of values:
cont> ('88339',
cont> '22550',
cont> '14-NOV-1967 08:30:00.00',
cont> '25-NOV-1988 16:30:00.00')
cont> ;
1 row inserted
SQL> --
SQL> -- Using the row that was just inserted, the following statement
SQL> -- shows the default date and time output:
SQL> --
SQL> SELECT SALARY_START, SALARY_END FROM SALARY_HISTORY-
cont> WHERE EMPLOYEE_ID = '88339';
  SALARY_START              SALARY_END
 14-NOV-1967 08:30:00.00   25-NOV-1988 16:30:00.00
1 row selected
SQL> --
SQL> -- The SET DATE FORMAT DATE statement customizes the
SQL> -- output of the date format.
SQL> --
SQL> -- The output will appear in the form
SQL> -- 14 NOV 67, as specified by the date-number argument 6.
SQL> --
SQL> SET DATE FORMAT DATE 6;
SQL> SELECT SALARY_START, SALARY_END FROM SALARY_HISTORY-
cont> WHERE EMPLOYEE_ID = '88339';
 SALARY_START   SALARY_END
 14 NOV 67      25 NOV 88
1 row selected
SQL> --
SQL> -- The SET DATE FORMAT TIME statement customizes
SQL> -- the output of the time format.  The output will appear
SQL> -- in the form 16 h 30 min 0 s, as specified by the
SQL> -- time-number argument 20.
SQL> --
SQL> SET DATE FORMAT TIME 20;
SQL> SELECT SALARY_START, SALARY_END FROM SALARY_HISTORY-
cont> WHERE EMPLOYEE_ID = '88339';
 SALARY_START       SALARY_END
 8 h 30 min 0 s     16 h 30 min 0 s
1 row selected
SQL> --
SQL> -- Note that the previous date example has deleted
SQL> -- the time output, and the previous time example has
SQL> -- deleted the date output.
SQL> --
SQL> -- If you want the display to continue to show
SQL> -- BOTH date and time, you must specify
SQL> -- both arguments with the SET DATE statement.
SQL> --
SQL> SET DATE FORMAT DATE 6, TIME 20;
SQL>  SELECT SALARY_START, SALARY_END FROM SALARY_HISTORY-
cont> WHERE EMPLOYEE_ID = '88339';
 SALARY_START                 SALARY_END
 14 NOV 67 8 h 30 min 0 s     25 NOV 88 16 h 30 min 0 s
1 row selected
SQL> --
SQL> -- The next example changes the digit separator to a period and
SQL> -- the radix point to a comma:
SQL> --
SQL> ALTER TABLE SALARY_HISTORY -
cont> ALTER SALARY_AMOUNT EDIT STRING 'ZZZ,ZZZ.ZZ';
SQL> --
SQL> SET RADIX POINT ','
SQL> SET DIGIT SEPARATOR '.'
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
 SALARY_AMOUNT
     26.291,00
     51.712,00
     26.291,00
     50.000,00
        .
        .
        .
SQL> --
SQL> -- This example shows how you can use the SET LANGUAGE
SQL> -- statement to change the output of dates to a particular
SQL> -- language.  This example shows the default English first,
SQL> -- followed by French.
SQL> --
SQL> -- Note that the time format is still based on
SQL> -- the SET DATE FORMAT TIME statement
SQL> -- previously executed in this example.
SQL> --
SQL> SELECT SALARY_START FROM SALARY_HISTORY;
 SALARY_START
  5 JUL 80 0 h 0 min 0 s
 14 JAN 83 0 h 0 min 0 s
  2 MAR 81 0 h 0 min 0 s
 21 SEP 81 0 h 0 min 0 s
  3 NOV 81 0 h 0 min 0 s
  1 JUL 82 0 h 0 min 0 s
 27 JAN 81 0 h 0 min 0 s
  1 JUL 75 0 h 0 min 0 s
 29 DEC 78 0 h 0 min 0 s
  2 FEB 80 0 h 0 min 0 s
  8 APR 79 0 h 0 min 0 s
 19 AUG 77 0 h 0 min 0 s
        .
        .
        .
SQL> --
SQL> SET LANGUAGE FRENCH
SQL> SELECT SALARY_START FROM SALARY_HISTORY;
 SALARY_START
  5 jul 80 0 h 0 min 0 s
 14 jan 83 0 h 0 min 0 s
  2 mar 81 0 h 0 min 0 s
 21 sep 81 0 h 0 min 0 s
  3 nov 81 0 h 0 min 0 s
  1 jul 82 0 h 0 min 0 s
 27 jan 81 0 h 0 min 0 s
  1 jul 75 0 h 0 min 0 s
 29 déc 78 0 h 0 min 0 s
  2 fév 80 0 h 0 min 0 s
  8 avr 79 0 h 0 min 0 s
 19 aoû 77 0 h 0 min 0 s
        .
        .
        .
SQL> --