プロが教えるわが家の防犯対策術!

COBOLソースに記述するホスト変数を使用したSELECT INSERT分に関する質問です。

COBOLのソースに下記のようなSQL分を記述した際、どのような制御でホスト変数にはどのような値が代入されるのでしょうか?

SELECT MAX(columnA) INTO :H1010:H2020 FROM A_TABLE WHERE …(以下抽出条件)

※H1010及びH2020はホスト変数定義しているものとします。

SELECTを行った項目数とINTO句にて指定した変数の数が異なる場合、エラーとなる記憶があります。
また、複数のホスト変数を使用する場合、カンマ区切りが必要だった記憶もあります。

実際に実行したところ、エラー等無く実行されました。結果を見るとH1010には値が代入され、H2020は初期値のままでした。
どのような制御でこの結果になっているのでしょうか?

参考までに、DBMSは「symfoware」です。

もしご存知の方がいらっしゃいましたら、ご教授頂けると助かります。よろしくお願いします。

A 回答 (2件)

一個の列の設定や受け取りで、



:値の受け取り変数[:標識変数]

といった書き方をします。

標識変数は、列の値が「null」なのか「nullでない有効な値」なのかを判別するために使います。

標識変数が負であれば、受け渡しをしようとした列値がnullという意味になります。この場合、列値の受け渡し変数の値は、保証されません。
標識変数の値が0であったり、正の数値なら、nullでない有効な列値が返されているという意味になります。

標識変数の値の具体的な意味については、お使いのRDBMS、コンパイラのマニュアルを参照してください。
    • good
    • 0
この回答へのお礼

標識変数ですか。
初めて聞く単語なのでちょっと戸惑いましたが、丁寧なご説明ありがとうございます。
勉強不足で申し訳ないです。

助かりました。ありがとうございます。

お礼日時:2010/06/12 04:10

:H1010:H2020と記述した場合には、値があればH1010に入って、H2020は正の整数が設定されます。


値がNULLの場合にはH1010は元の値のままで、H2020に負の整数が設定されます。
ですから、SELECT後には、最初にH2020を判定して、正の整数ならH1010の値を利用します。
H2020が負の場合には、H1010に値がない場合の処理をします。
    • good
    • 0
この回答へのお礼

なるほど。後ろに記述した変数にはSELECT結果がNULLかどうかの判断結果が代入されるのですね。
直前でイニシャライズしていたので気付きませんでした。

分り易いご説明ありがとうございます。助かりました。

お礼日時:2010/06/12 04:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!