選択された値をホスト変数に格納するように指定する SELECT 節です。
Synopsis
Note:
INTO 節とホスト変数は、
埋め込み SQL内でのみ使用されます。ホスト変数は、
ダイナミック SQL では使用されません。ダイナミック SQL では、出力変数と同様の機能が %Library.ResultSet によって用意されています。
ホスト変数と
INTO 節を使用するときには、以下の規則が適用されます。
-
ホスト言語が変数のデータ型を宣言する場合、すべてのホスト変数は
SELECT 文を呼び出す前にホスト言語で宣言される必要があります。取得したフィールド値のデータ型は、ホスト変数の宣言と一致する必要があります (Caché ObjectScript では変数にデータ型を宣言しません)。
-
INTO 節内のホスト変数の数は、
select-item リスト内で指定されたフィールドの数と一致する必要があります。選択したフィールドの数とホスト変数の数が異なる場合、SQL は "cardinality mismatch" エラーを返します。
-
選択したフィールドとホスト変数は、相対的な位置によって一致させます。したがって、これらの 2 つのリスト内の対応する項目は同じシーケンスで表示される必要があります。
-
ホスト変数には単一の値のみを含めることができます。したがって、埋め込み SQL 内の
SELECT では 1 行のデータのみが取得されます。既定では、この行はテーブルの最初の行になります。
WHERE 節で一意のデータ値を指定することにより、特定の行を選択することができます。集約値 (count、sum、average など) を返す
SELECT は、単一の値も返します。
INTO 節を指定する場合、SQL は選択したフィールド値を表示しません。
包含するプログラムのホスト変数値の使用に関する重要な制限事項の詳細は、"
ホスト変数" を参照してください。
以下の例は、Caché ObjectScript プログラム内で埋め込み SQL を使用します。SQL は、テーブルの最初のレコードから 3 フィールドを選択し (埋め込み SQL は常に 1 つのレコードを取得します)、
INTO を使用して 3 つの対応するホスト変数を設定します。これらの変数は Caché ObjectScript
WRITE コマンドによって使用されます。SQLCODE 変数を埋め込み SQL から返されるときに直ちにテストできるので、プログラミングをする上で便利です。
NEW SQLCODE
WRITE !,"Going to get the first record"
&sql(SELECT Home_State, Name, Age
INTO :state, :name, :age
FROM Sample.Person)
IF SQLCODE=0 {
WRITE !," Name=",name
WRITE !," Age=",age
WRITE !," Home State=",state }
ELSE {
WRITE !,"SQL error ",SQLCODE }
以下の埋め込み SQL の例は、ホスト変数 (today) を SELECT 文に渡します。計算結果は INTO 節変数値 (:tomorrow) になります。このホスト変数値は、包含するプログラムに渡されます。
SET today=$HOROLOG
&sql(SELECT :today+1
INTO :tomorrow
FROM Sample.Person)
IF SQLCODE=0 {
WRITE !,"Tomorrow is: ",$ZDATE(tomorrow) }
ELSE {
WRITE !,"SQL error ",SQLCODE }
入力および出力ホスト変数値の使用に関する制限事項の詳細は、"
ホスト変数" を参照してください。
以下の例は、Caché ObjectScript プログラム内で埋め込み SQL を使用して 2 つのテーブルのレコードをカウントします。SQL は
COUNT 集約関数を使用してレコードをカウントし、
INTO 節を指定して各カウントに添え字付き変数を設定します。これらの変数は Caché ObjectScript
WRITE コマンドによって使用されます。
WRITE !,"Counting the records"
&sql(SELECT COUNT(*)
INTO :total(1)
FROM Sample.Person)
&sql(SELECT COUNT(*)
INTO :total(2)
FROM Sample.Employee)
IF SQLCODE=0 {
WRITE !,"Total Person records=",total(1)
WRITE !,"Total Employee records=",total(2) }
ELSE {
WRITE !,"SQL error ",SQLCODE }
-
-
Caché ObjectScript :
SET コマンド