web-dev-qa-db-ja.com

結果が確定的に返されるのはいつですか、そうでない場合はいつですか?

次のようなステートメントを実行すると、

select first field1, field2 from exampleTable where field1 = '1';

その後、次のような警告が表示されます。

返される結果は非決定的なSQLCode = 122です。

これまでのところ問題はありません。この場合、ここに「order by」句が必要だからです。

しかし、BEGIN ENDブロック内で同じステートメントを使用して、値をいくつかの宣言された変数に入れると、

BEGIN
declare varField1 varchar;
declare varField2 varchar;

select first field1, field2 into varField1, varField2 
from exampleTable 
where field1 = '1';

END

警告は出ません!どうして?

ここで「order by」句は必要ありませんか?このステートメントは突然確定的ですか?...

(SQL Anywhere 12を使用)

6
axel foley

SQLでは行は特定の順序で返されないため(実際にはほとんどの場合同じ順序になる可能性が高い)、ORDER BYを使用しないと、最初に行が返される可能性があります。したがって、この最初のレコードはクエリを実行するたびに変わる可能性があるため、非決定的です。

ブロックでそれを包むことは答えを確定的ではなく、単に警告を隠すだけです。

4
JamesRyan

呼び出し間で変更される可能性があるデータのため、ベーステーブルからの選択ステートメントはすべて非決定的であると思います。

0
msi77