SQL文で使用するプログラム変数はすべて、ホスト変数として宣言する必要があります。ホスト変数は、ホスト言語の規則に従って宣言部で宣言します。通常の有効範囲規則を適用します。ホスト変数名は、長さに制限はありませんが、有効な文字は最初の31文字のみです。ANSI/ISO準拠のため、ホスト変数名は長さを18文字以下にし、先頭が文字で、連続したアンダースコアや後続のアンダースコアを含まないことが必要です。
ホスト変数の外部データ型およびそのソース・データベースまたはターゲット・データベース列の内部データ型は、同じである必要はありませんが、互換性が必要です。表3-6では、必要に応じてOracleで自動的に変換される互換性のあるデータ型を示しています。
Oracle プリコンパイラでは、ほとんどの組込みホスト言語データ型をサポートしています。サポートされるデータ型のリストは、使用ホスト言語の補足資料を参照してください。ユーザー定義のデータ型はサポートされていません。データ型の同値化については、次の項で説明します。
ユーザー定義の構造体の参照はできませんが、Pro*COBOLプリコンパイラを使用すれば、構造体の個々の要素をホスト変数であるかのように参照できます。ホスト変数が使用可能な場所ならば、そのような参照を使用できます。
次の例では、3つのホスト変数を宣言してから、SELECT
文を使用して、ホスト変数emp_numberの値に一致する従業員番号をデータベースで検索します。一致する行が見つかると、Oracleでは出力ホスト変数dept_numberとemp_nameをその行のDEPTNO
列とENAME
列の値に設定します。
-- declare host variables EXEC SQL BEGIN DECLARE SECTION; emp_number INTEGER; emp_name CHARACTER(10); dept_number INTEGER; EXEC SQL END DECLARE SECTION; ... display 'Employee number? '; read emp_number; EXEC SQL SELECT DEPTNO, ENAME INTO :dept_number, :emp_name FROM EMP WHERE EMPNO = :emp_number;
ホスト変数の使用方法の詳細は、ホスト変数の使用についてを参照してください。
VARCHAR
擬似型を使用すると、可変長文字列を宣言できます。(擬似型は、使用するホスト言語に固有のデータ型ではありません。)VARCHAR
変数には2バイト長のフィールドの後に文字列フィールドが1つ続くことを思い出してください。たとえば、Pro*COBOLプリコンパイラでは、次のVARCHAR
宣言がどのように処理されるか見てみましょう。
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 ENAME PIC X(20) VARYING. EXEC SQL END DECLARE SECTION END-EXEC.
宣言は、配列と長さのメンバーを指定した次のCOBOLグループ項目に拡張されます。
01 ENAME. 05 ENAME-LEN PIC S9(4) COMP. 05 ENAME-ARR PIC X(20).
VARCHAR
の長さは、長さフィールドを参照すればわかります。文字列ファンクションまたは文字カウント・アルゴリズムを使用する必要はありません。
VARCHAR
の詳細は、このマニュアルに対する使用ホスト言語の補足資料を参照してください。
ホスト変数の宣言および参照については、次のガイドラインに従ってください。ホスト変数には次の必要条件があります。
宣言部で明示的に宣言します。
SQL文およびPL/SQLブロックではコロン(:)の接頭辞を付けます。
ホスト言語でサポートされているデータ型です。
ソースまたはターゲットのデータベース列と互換性のあるデータ型です。
ホスト変数では、次のことはしないください。
添字を付ける
ホスト言語文で先頭にコロン
列、表またはその他Oracleオブジェクトの識別に使用
ALTERやCREATEなどのデータ定義文に使用
Oracleの予約語(Oracleの予約語、キーワードおよびネームスペースを参照)
ホスト変数では次のことができます。
SQL文で式が使用可能な場所での使用
インジケータ変数と関連付けることができます。