スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

7.3.1 記述規則

UAPを作成するとき,SQLの文法の規則以外に,名標の付け方やSQLの記述についての規則があります。

<この項の構成>
(1) 名標の付け方の規則
(2) SQLの記述規則

(1) 名標の付け方の規則

名標を付ける場合,基本的にCOBOL言語の規則に従います。

COBOL言語の規則以外に,名標を付けるときの規則を次に示します。

(a) SQLの予約語
(b) ホスト名

なお,使用する埋込み変数,標識変数,及び分岐先の名前の付け方は,名標の付け方の規則,及びCOBOL言語の規則に従います。また,次に示す名標は外部属性を持つため,使用できないので注意してください。

(2) SQLの記述規則

  1. SQLは,一つのSQL文ごとにSQL先頭子(EXEC SQL)とSQL終了子(END-EXEC)とで囲みます。
    <指定例>
      
      EXEC SQL  SQL文    END-EXEC.
      
  2. COBOL言語とSQLとを同一行に混在できません。
  3. SQLは,SQL先頭子,及びSQL終了子も含めてすべてB領域(第12欄〜72欄)に記述します。

    [図データ]

  4. SQLの継続規則は,原則としてCOBOL言語の「行のつなぎ」の規則に従います。
    SQLで空白を必ず挿入する箇所,又は空白を挿入できる箇所であれば,自由に行を変えて記述できます。また,複数行にわたって記述することもできます。
    SQLで空白を挿入できない箇所で行を変えるときは,次の行の標識領域にハイフン(-)を記述して,B領域の任意の欄から行の続きを記述します。
    文字列定数の途中で行を変えるときは,必ず第72欄まで記述し,続きを次の行のB領域に記述します。また,文字列の続きは,最初に引用符又はアポストロフィ(引用符又はアポストロフィの最初に記述した方)を記述し,その引用符又はアポストロフィの次の欄から記述します。
  5. SQL先頭子の直前に,段落の見出しを記述できます。
    なお,段落の見出しを同一行には記述できません。
    <正しい指定例>
      
      OWARI.
          EXEC SQL  SQL文    END-EXEC.
      
    <誤った指定例>
      
      OWARI.  EXEC SQL  SQL
                 END-EXEC.
      
    注  部分が誤りです。
  6. 一つのSQLは,COBOL言語での一つの命令として扱われます。したがって,SQLが一つの完結文の最後の命令になる場合,SQL終了子の後ろに終止符と空白を指定します。
    <一つのSQLが一つの完結文の場合の指定例>
      
      EXEC SQL
           SQL文
      END-EXEC.
      
    <SQLが完結文中の最後の命令の場合の指定例>
      
      IF U-IOKBN = '2'
      THEN
          EXEC SQL   SQL文   END-EXEC.
      
    <SQLが完結文の途中の命令の場合の指定例>
      
      IF U-IOKBN = '1'
      THEN
        EXEC SQL   SQL文
        END-EXEC
      ELSE  IF  U-IOKBN = '2'
        THEN  NEXT  SENTENCE.
      
  7. SQL中には注記行を記述できませんが,SQL先頭子とSQL終了子の間には,注記行を何行でも記述できます。
    <指定例>
      
      EXEC SQL
      *ZAIKO表を検索するSELECT文に対して  …注記行
      *カーソルを宣言する           …注記行
        SQL文
      END-EXEC.
      
  8. 埋込み変数の宣言は,次に示す規則に従います。
    • 埋込みSQL宣言節は,次のどれかの節内で記述します。
      ・データ部(DATA DIVISION)のファイル節(FILESECTION)
      ・作業場所節(WORKING-STORAGE SECTION)
      ・局所記憶節(LOCAL-STORAGE SECTION)
      ・連絡節(LINKAGE SECTION)
    • SQLのデータ型に対応する埋込み変数については,「付録F SQLのデータ型とデータ記述」を参照してください。
    • 埋込み変数のデータ記述項には,JUSTIFIED,BLANK,及びWHEN ZERO句を指定できません。
    • レベル番号66の再命令項目,及びレベル番号88の条件名項目を埋込み変数としては使用できませんが,埋込みSQL宣言節で定義できます。
    • 埋込みSQL宣言節内のデータ記述項目の行のつなぎは,COBOL言語の「行のつなぎ」の規則に従います。
    • 「FILLER」は埋込み変数として使用できません。
    • TYPE句,TYPEDEF句,及びSAME AS句を使用したデータ項目は,埋込み変数として使用できます。
    • REDEFINES句を使用した場合,再定義する項目と再定義される項目のけた詰めが同じかどうかはチェックしていません。領域の大きさは,どちらか大きい方に合わせます。
    • PICTURE句を省略し,VALUE句だけを指定したデータ項目は,埋込み変数として使用できません。
    • -Eオプションを使用すると,埋込みSQL宣言節を使用しなくても,宣言したデータ項目を埋込み変数として使用できます。ただし,SQL文で埋込み変数として使用できるのは,「付録F SQLのデータ型とデータ記述」の形式で宣言したデータ項目だけです。そのほかの形式のデータ項目は,埋込み変数として使用できません。
      データ項目名は,COBOL言語の文法に従って各データ項目名の有効範囲が判定されます。埋込み変数として使用できるデータ項目は,ソース内に記述されている必要があります。COPY文又はINCLUDE文で引き込まれる登録原文中のデータ項目は,埋込み変数として使用できません。
    • COBOL2002のクラス継承機能を使用して,親クラスから継承したデータ項目は,埋込み変数として使用できません。
    • COBOL2002のUnicode機能を使用するUAPでは,SQLプリプロセサ実行時に-XU16オプションを指定すると,UTF-16の文字データを格納する日本語項目を埋込み変数として使用できます。日本語項目を使用した埋込み変数は,SQL文中で混在文字データ型(MCHAR又はMVARCHAR)に対応する埋込み変数が使用できる箇所なら,どこにでも埋め込むことができます。なお,使用できる文字の範囲はCOBOL2002のUnicode機能がサポートする範囲内に限定されます。
      COBOL2002のUnicode機能を使用したUAPの実行については「8.4.3 COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。
  9. 標識変数の宣言は,次に示す規則に従います。
    • 標識変数は,レベル番号01〜49の基本項目,又はレベル番号77の独立項目であることが前提になります。
    • 標識変数のデータ記述項については,「付録F SQLのデータ型とデータ記述」を参照してください。
    • 標識変数のデータ記述項目には,SIGN,JUSTIFIED,BLANK,及びWHEN ZERO句を指定できません。
    • 「FILLER」は,標識変数名として使用できません。
    • -Eオプションを使用すると,埋込みSQL宣言節を使用しなくても,宣言したデータ項目を標識変数として使用できます。ただし,SQL文で標識変数として使用できるのは,「付録F SQLのデータ型とデータ記述」の形式で宣言したデータ項目だけです。そのほかの形式のデータ項目は,標識変数として使用できません。
      データ項目名は,COBOL言語の文法に従って各データ項目名の有効範囲が判定されます。標識変数として使用できるデータ項目は,ソース内に記述されている必要があります。COPY文又はINCLUDE文で引き込まれる登録原文中のデータ項目は,標識変数として使用できません。
    • COBOL2002のクラス継承機能を使用して,親クラスから継承したデータ項目は,標識変数として使用できません。
  10. COBOL言語でのSQLを記述できる部(DIVISION)を次の表に示します。

    表7-3 COBOL言語でのSQLを記述できる部

    SQL文 データ部 手続き部
    定義系SQL ×
    操作系SQL ×
    制御系SQL ×
    埋込み言語 BEGIN DECLARE SECTION ×
    END DECLARE SECTION ×
    COPY
    WHENEVER ×
    DECLARE CONNECTION HANDLE UNSET × ×
    COMMAND EXECUTE × ×
    上記以外 ×
    (凡例)
    ○:記述できます。
    ×:記述できません。
    注※
    作業場所節,ファイル節,又は連絡節の中の一つを指します。
  11. WHENEVER文,及びカーソル宣言は宣言文なので,IF命令,及びEVALUATE命令中には記述できません。
  12. SQL先頭子とSQL終了子で囲まれたSQL文の途中には,コンパイルリスト出力制御(EJECT,SKIP1,SKIP2,SKIP3,又はTITLE)を記述しないでください。表名や列名としてEJECT,SKIP1,SKIP2,SKIP3,又はTITLEを使用する場合は,必ず引用符で囲んでください。なお,表名や列名などが語句の一部分としてEJECT,SKIP1,SKIP2,SKIP3,又はTITLEを含む場合は,囲む必要はありません。
  13. SQL先頭子からSQL終了子までの間に記述した注釈(/*〜*/)は削除します。ただし,SQL最適化指定(/*>>〜<<*/)は削除しないで,SQL文として扱います。注釈及びSQL最適化指定を複数行にわたって記述している場合は,*/が現れるまで行の先頭はB領域の先頭から始まっているとみなされます。また,行のつなぎは使用しないでください。SQL文中での注釈及びSQL最適化指定については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
  14. 行内注記(*>)を使用できます。ただし,SQL先頭子からSQL終了子までの間は,行内注記を使用できません。使用した場合,行内注記ではなく文字列として扱われます。
  15. 埋込みSQL宣言節,及びSQLに記述した行では,タブコードを長さ1文字として扱います。また,-E2,及び-E3オプションを使用した場合,すべてのデータ部が同様に,タブコードを長さ1文字として扱います。
  16. COBOL2002のオブジェクト指向機能を使用する場合,「7.5.1(2) SQLの記述規則」も適用されます。