ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 1.6 キーワードおよび行終端文字

構文図では、キーワードは大文字で表示されます。対話型SQLでは、キーワードの短縮形が構文的に認められている選択肢を一意に示している場合、キーワードを短縮できます。ホスト言語プログラム（プリコンパイルされたモジュール言語または動的SQL）で使用されるSQL文では、キーワードを短縮できません。

キーワードには、次の2つのタイプがあります。

- 必須: 大文字および下線付き

- オプション: 大文字のみ

## 1.6.1 文の終了記号およびコメント文字

SQL文は、SQL文を発行する環境によってその終了方法が異なります。

- 対話型SQLでは、セミコロン（;）で文を終了する必要があります。
  ただし、対話型SQL内でのみ有効な文（オペレーティング・システムの起動（$）、実行（@）、EDIT、EXIT、QUIT、SETおよびSHOW）は例外となります。
  対話型SQLでは、行の末尾にハイフン（-）を指定すると明示的に次の行に継続できます。この行継続文字は、マイナス演算子よりも優先されます。問合せでハイフンをマイナス演算子として使用する場合は、次の行に続く行末にマイナス演算子を入力しないでください。ただし、次に示すようにハイフンを2回繰り返すことは可能です。

      SQL> SELECT col1 - -
      cont> col2 FROM my_table;

  前述の例では、1つ目のハイフンがマイナス演算子、2つ目のハイフンが行継続文字として解釈されます。
  SETをCONTINUE CHARACTER引数とともに使用して、対話型SQLの継続文字を定義することもできます。詳細は、「SET文」を参照してください。

- プリコンパイルされたプログラムでは、文の終了記号はホスト言語によって異なります。

  - COBOL: END-EXEC

  - FORTRAN: 必要なし

  - Ada: セミコロン（;）

  - C: セミコロン（;）

  - Pascal: セミコロン（;）

  - PL/I: セミコロン（;）

- SQLモジュール言語ファイルでは、DECLARE文は継続します。その他の文では、文末にセミコロンを付けます。

- 動的SQLでは、オプションの文の終了記号を使用できます。この文の終了記号は、あいまいな構文を処理するときに役立つ場合があります。

文の終了記号と同様に、SQLによって指示コメントとして認識される表記法は環境によって異なります。

- 対話型SQLでは、感嘆符（!）またはダブル・ハイフン（-）がコメント文字として解釈されます。対話型SQLでは、感嘆符またはダブル・ハイフンの後に続く行にある文字は無視されます。

  注意 Oracle Rdbでは、コメント文字にダブル・ハイフン（-）を使用することをお薦めします。これにより、対話型SQL文をSQLモジュール言語プログラムに移植でき、ANSI/ISO規格に準拠することにもなります。

- Oracle Rdbでは、Oracle RDBMSとの互換性のために複数行の埋込みコメントがサポートされています。
  このようなコメントは、文字/*で始まり*/で終わります（通常は後続行にあります）。コメントをオープンしてクローズする文字である*と/の間にはスペースを入れません。
  このコメント形式はSQLコマンド・スクリプト内の文の無効化に使用されることがあるため、Rdbではネストしたコメントがサポートされています。これにより、既存の一連のSQLコマンド内にあるコメントは、さらに大きなコメント順序で使用する場合に無視できます。つまり、対応する*/のみがコメントをクローズします。次に例を示します。

  注意 ネストしたコメントは、ORACLE LEVEL1またはORACLE LEVEL2の言語ではサポートされていません。

  終了していないコメントの特定は困難であることが多いため、対話型SQLプロンプトでは、コメントが継続する行は***>に変換されます。
  Oracle Rdbでは引き続き、感嘆符（!）およびダブル・ハイフン（-）がコメントの先頭文字としてサポートされます。この文字を使用すると、単一行をコメントとして指定できます。行の終了は、コメントの終了とみなされます。
  例:
  次の例は、複数行の埋込みコメントを示しています。

      SQL> -- show that text is hidden
      SQL> show /* current */ version
      Current version of SQL is: Oracle Rdb SQL V8.0-00
      SQL>
      SQL> /*
      ***> **********************************
      ***> The following query fetches the
      ***> JOB_HISTORY row for the current job
      ***> of employee 164 (aka Alvin Toliver)
      ***> ***********************************
      ***> */
      SQL> select department_code,
      cont>        job_start /*, employee_id*/
      cont> from JOB_HISTORY
      cont> where employee_id = '00164'
      cont>   and job_end is null;
       DEPARTMENT_CODE   JOB_START
       MBMN              21-Sep-1981
      1 row selected
      SQL>
      SQL> /* disable this CREATE VIEW
      ***> create view V_00164
      ***>     as select e.last_name, /* e.middle_initial, */ e.first_name,
      ***>          sh.salary_amount
      ***>    from EMPLOYEES e, SALARY_HISTORY sh
      ***>    where e.employee_id = '00164'
      ***>          and sh.employee_id = e.employee_id;
      ***>
      ***> select * from V_00164;
      ***> select count/*all*/(*) from V_00164;
      ***> */
      SQL>

- SQLプリコンパイラでは、埋込みSQL文内のコメントにホスト言語ルールが使用されます。

- SQLモジュール・プロセッサでは、ダブル・ハイフンはコメント文字として解釈されます。

- 動的SQLでは、ダブル・ハイフンはコメント文字として解釈されます。

# 1.7 マルチベンダー統合アーキテクチャのサポート

Oracle Rdbでは、マルチベンダー統合アーキテクチャ（MIA）がサポートされています。このサポートには、次の項目が含まれています。

- DEC Multinational Character Set（MCS）および複数のキャラクタ・セット。サポートされているキャラクタ・セットの詳細は、第2.1節を参照してください。

- 1つのデータベースで複数のキャラクタ・セットの使用。

- データベース・オブジェクト、識別子、リテラルおよび文字データ型パラメータのキャラクタ・セットの指定。

- 識別子の大/小文字の区別を保持するデリミタ付き識別子の使用。詳細は、第2.2節を参照してください。

- オクテットではなく文字による文字長およびオフセットの指定。

- 次のMIA準拠のキャラクタ・セットを設定するSET DIALECT 'MIA'文の使用。

  - デフォルト・キャラクタ・セット: KATAKANA

  - 各国語キャラクタ・セット: KANJI

  - 識別子キャラクタ・セット: DEC_KANJI

  - リテラル・キャラクタ・セット: KATAKANA

また、SQLでは、SQLプリコンパイルされたCプログラム、COBOLプログラムおよびFORTRANプログラム内の新しい文字データ型変数もサポートされています。データ型の詳細は、第4.4.3項、第4.4.4項および第4.4.5項を参照してください。

SQLでは、SQLモジュール言語内の仮パラメータに特定のキャラクタ・セットまたは各国語キャラクタ・セットを指定することもできます。詳細は、第3.2節および「DECLARE MODULE文」を参照してください。

MCS以外のキャラクタ・セットを使用する場合は、キャラクタ・セットが次の要素に及ぼす影響に注意してください。

- LIKE条件: 第2.7.8項を参照してください。

- サブストリング: 第2.6.2.21項を参照してください。

- データ型間の変換: 第2.3.8項を参照してください。

- 文字列連結演算子: 第2.6.6項を参照してください。

インストール時に、SQLによって様々な言語の多数のサンプル・プログラムがインストールされます。これらのプログラムは、システムのサンプル・ディレクトリにインストールされます。各プログラムについての簡単な説明は、サンプル・ディレクトリ内にあるファイルabout_sql_examples.txtに記載されています。これらのプログラムの1つであるMIA_CHAR_SETでは、MIAに準拠するために必要な別のキャラクタ・セットを使用するデータベースが作成されます。

- sql_mia_char_set_mod.cは、Cプログラムのソース・ファイルです。

- sql_mia_char_set_c.sqlmodは、SQLモジュール・ファイルです。

- sql_mia_char_set_pre.scは、SQLプリコンパイラのファイルです。

# 第2章
言語要素および構文要素

SQLでは、多くの文に共通の基本構文要素および言語要素が使用されます。これらの要素は、詳細な説明なしに構文図で言及されます。この章では、次の要素について説明します。

- キャラクタ・セット

- 名前

- データ型

- リテラル

- SQLフォーマット句およびDATATRIEVEフォーマット句

- 値式

- 条件

- 選択式および列選択式

SQL文を作成して特定のタスクを実行する方法の詳細は、『Oracle Rdb7 Introduction to SQL』および『Oracle Rdb7 Guide to SQL Programming』を参照してください。

# 2.1 サポートされているキャラクタ・セット

Oracle Rdbでは複数のキャラクタ・セットがサポートされており、1つのデータベースで複数のキャラクタ・セットを使用できます。

表2-1は、サポートされているキャラクタ・セット、SQL文でキャラクタ・セットを指定する場合の名前およびキャラクタ・セットの説明を示しています。

表2-1 サポートされているキャラクタ・セット
キャラクタ・セット1 | 説明
--- | ---
AL24UTFFSS | Unicode標準1.1に基づくUTF-8エンコーディング
ASCII | 7ビットASCII文字
ARABIC | ISO9036標準で規定されているアラビア文字
BIG5 | 台湾の情報産業で使用されているキャラクタ・セット
DEC_HANYU | 台湾で使用されている標準CNS11643:1986規格の繁体字中国語文字（繁体）、DTSCCおよびASCIIで規定されている補助文字
DEC_HANZI | 標準GB2312:1980およびASCII文字で規定されている中国語（Bopomofo）文字
DEC_KANJI | JIS X0208:1990標準で規定されている日本語文字、JIS X0201:1976で規定されている半角カタカナ文字（SS2（8E hex）の接頭辞が付く）、ユーザー定義文字およびASCII文字
DEC_KOREAN | 標準KS C5601:1987およびASCII文字で規定されている韓国語文字
DEC_MCS | 国際英数字（発音区別符号を含む）
DEC_SICGCC | 台湾で使用されている標準CNS11643:1986およびASCII規格の繁体字中国語文字（繁体）
DEVANAGARI | ISCII:1988標準で規定されているデーバナーガリー文字
DOS_LATIN1 | DOS Latin 1コード
DOS_LATINUS | DOS Latin USコード
GB18030 | 中華人民共和国（PRC）で使用されているGB18030-2000標準規格の簡体字中国語文字
HANYU | 台湾で使用されている標準CNS11643:1986規格の繁体字中国語文字（繁体）
HANZI | 標準GB2312:1980で規定されている中国語（Bopomofo）文字
HEX | テキスト・データと16進データの相互変換
ISOLATIN1 | ISO/IEC 8859-1:1987標準規格の拡張西ヨーロッパ言語文字
ISOLATIN9 | ユーロ文字のコードポイントを含むISO/IEC 8859-15標準規格の拡張西ヨーロッパ言語文字
ISOLATINARABIC | ISO/IEC 8859-6:1987標準規格のアラビア文字
ISOLATINCYRILLIC | ISO/IEC 8859-5:1987標準規格のキリル文字
ISOLATINGREEK | ISO/IEC 8859-7:1987標準規格のギリシャ文字
ISOLATINHEBREW | ISO/IEC 8859-8:1987標準規格のヘブライ文字
KANJI | JIS X0208:1990標準規格の日本語文字およびユーザー定義文字
KATAKANA | 標準JIS X0201:1976で規定されている日本語音標文字（半角カタカナ）
KOREAN | 標準KS C5601:1987で規定されている韓国語文字
SHIFT_JIS | Shift_JIS固有のコード体系を使用し、JIS X0208:1990標準で規定されている日本語文字、JIS X0201:1976で規定されている半角カタカナ文字およびASCII文字
TACTIS | TACTIS（タイAPIコンソーシアム/タイ業界標準）で、ISO 646-1983標準とTIS 620-2533標準の組合せに基づくタイ語文字
UNICODE | Unicode標準およびISO/IEC 10646変換形式UTF-16で規定されているUnicode文字
UNSPECIFIED | 第2.1.10項を参照
UTF8 | Unicode標準およびISO/IEC 10646 UTFエンコーディング形式で規定されているUnicode文字
WIN_ARABIC | MS Windowsコード・ページ1256 8ビット・ラテン語/アラビア語
WIN_CYRILLIC | MS Windowsコード・ページ1251 8ビット・ラテン語/キリル語
WIN_GREEK | MS Windowsコード・ページ1253 8ビット・ラテン語/ギリシャ語
WIN_HEBREW | MS Windowsコード・ページ1255 8ビット・ラテン語/ヘブライ語
WIN_LATIN1 | MS Windowsコード・ページ1252 8ビット西ヨーロッパ言語

1各国間でのアプリケーションの移植性を高めるために、キャラクタ・セット名のかわりに論理名を使用できます。詳細は、第2.1.11項を参照してください。

サポートされているキャラクタ・セットは、識別子キャラクタ・セットとしての指定を除き、指定されている場合はいつでも使用できます。識別子キャラクタ・セットの詳細は、第2.1.5項を参照してください。

各キャラクタ・セットは、文字をコーディングする方法が異なります。つまり、すべて1オクテットでコーディングされるキャラクタ・セットの文字もあれば、複数のオクテットでコーディングされるキャラクタ・セットの文字もあります。（オクテットとは、8ビットの集まりです。）

文字をコーディングする方法は、次のとおりです。

- 単一のオクテット
  単一のオクテット・キャラクタ・セットは、すべて1オクテットで表されます。ASCIIは、単一のオクテット・キャラクタ・セットの一例です。各ASCII文字は、1オクテットで表されます。

- 複数のオクテット
  複数のオクテット・キャラクタ・セットは、通常、すべて1つ以上のオクテットで表されます。キャラクタ・セットには、固定数の複数のオクテット・キャラクタ・セットと混合数の複数のオクテット・キャラクタ・セットがあります。

  - 固定数の複数のオクテット
    固定数の複数のオクテット・キャラクタ・セットは、2つ以上の固定数オクテットで表されます。漢字は、固定数の複数のオクテット・キャラクタ・セットの一例です。各漢字は、2オクテットで表されます。

  - 混合数の複数のオクテット
    混合数の複数のオクテット・キャラクタ・セットは、1つ以上の混合数のオクテットで表され、同じ文字列でASCIIおよび固定数の複数のオクテット・キャラクタ・セットを使用できます。DEC_KANJIは、混合数の複数のオクテット・キャラクタ・セットの一例です。ASCII文字は1オクテットで表され、漢字は2オクテットで表されます。

表2-2は、サポートされている各キャラクタ・セットが単一の文字をコーディングする場合に使用するオクテット数を示しています。

表2-2 キャラクタ・セットの文字で使用されるオクテット数
キャラクタ・セット | 各文字に使用されるオクテット数
--- | ---
単一のオクテット・キャラクタ・セット
ASCII | 1オクテット
DEC_MCS | 1オクテット
DOS_LATIN1 | 1オクテット
DOS_LATINUS | 1オクテット
ISOLATINARABIC | 1オクテット
ISOLATINHEBREW | 1オクテット
ISOLATINCYRILLIC | 1オクテット
ISOLATINGREEK | 1オクテット
ISOLATIN1 | 1オクテット
ISOLATIN9 | 1オクテット
DEVANAGARI | 1オクテット
KATAKANA | 1オクテット
TACTIS | 1オクテット
UNSPECIFIED | 1オクテット
WIN_* | 1オクテット
固定数の複数のオクテット・キャラクタ・セット
BIG5 | 2オクテット
HEX | 2オクテット
HANYU | 2オクテット
HANZI | 2オクテット
KANJI | 2オクテット
KOREAN | 2オクテット
UNICODE | 2オクテット
混合数の複数のオクテット・キャラクタ・セット
AL24UTFFSS | 1〜3オクテット（UTF-8標準で指定）
DEC_KOREAN | ASCII文字は1オクテット、韓国語文字は2オクテット
DEC_SICGCC | ASCII文字は1オクテット、繁体文字は2オクテット
DEC_HANYU | ASCII文字は1オクテット、繁体文字は2オクテット、補助文字は4オクテット
DEC_HANZI | ASCII文字は1オクテット、簡体文字は2オクテット
DEC_KANJI | ASCII文字は1オクテット、漢字は2オクテット、半角カタカナは2オクテット（SS2（8E hex）の接頭辞と単一のオクテットJIS X0201文字）
SHIFT_JIS | ASCII文字は1オクテット、半角カタカナは1オクテット、SHIFT_JISエンコーディングを使用する漢字は2オクテット
UTF8 | 1〜3オクテット（UTF-8標準で指定）

複数のオクテット文字は、編集文字列、ファイル名、リポジトリ・パス名またはデータベース名に使用できません。

## 2.1.1 自動変換

Oracle Rdbでは、テキスト列へのリテラルの代入や2つの文字列変数の比較などのテキスト・データの操作中に、操作が確実に実行されるよう、キャラクタ・セットの互換性チェックが実行されます。

ほとんどの場合、2つのテキスト・オブジェクトは操作を実行する前に同一キャラクタ・セットにしておく必要があるため、自動変換が有効になっていない場合、このチェックはかなり限定的なものになります。

自動変換機能を使用すると、キャラクタ・セットのチェックを限定的にするかどうか、Rdbでキャラクタ・セットの変換を行うかどうかを選択できます。この機能は、代入や比較の前に実行するTRANSLATEファンクションに類似しています。

自動変換を有効にすると、以前は明示的に実行するために追加の変換手順が必要だった操作を簡単に実行できます。

1. 共通の文字サブセット（例: DEC_MCSとDEC_KANJIではASCIIが共通）を持つ異なるキャラクタ・セットでエンコードされたデータを含む列間で比較を実行します。

2. 同じSQLコードを使用して、クライアントの環境とは関係なく、データベースのデータにアクセスします。たとえば、DEC_MCS列にアクセスする日本語PCユーザーは、TRANSLATE文をSQLコマンドに追加して、画面に表示する前にDEC_MCSをSHIFT_JISに変換する必要があります。自動変換を有効に設定し、表示キャラクタ・セットを指定すると、この操作は不要になります。

3. 明示的な変換を行わずに、ネイティブ・インタフェースからデータを入力します。たとえば、日本語PCでSHIFT_JISを使用するユーザーは、明示的な変換文を使用せずに、データベースのデータにアクセスしてDE_KANJI列にデータを挿入できます。

自動変換を有効にする方法は、次のとおりです。

1. SET AUTOMATIC TRANSLATION文を使用します。

2. SQL$AUTOMATIC_TRANSLATION論理名を定義します。

SQL$AUTOMATIC_TRANSLATION

論理名SQL$AUTOMATIC_TRANSLATIONを使用すると、SQLユーザーは、デフォルトで自動変換が有効になるよう指定できます。

論理名SQL$AUTOMATIC_TRANSLATIONは、クライアントSQLプロセスにアクセス可能な論理名の表に配置できます。

SQLを起動する前に論理名が文字列TRUEまたは値Tのいずれかに設定されている場合、自動変換はデフォルトで有効になっています。その他の値の場合は、SQL内で自動変換が無効になります。