Sybase

什麼時候返回確定性的結果,什麼時候不是?

  • January 31, 2012

如果你執行這樣的語句:

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)

在 SQL 中,行不會以任何特定順序返回(實際上它們在大多數情況下可能以相同的順序),因此如果沒有 ORDER BY,任何行都可以首先返回。所以它是非確定性的,因為每次執行查詢時第一條記錄都會發生變化。

將它包裝在一個塊中不會使答案具有確定性,它只會隱藏警告。

我相信基表中的任何選擇語句都是不確定的,因為數據可以在呼叫之間發生變化。

引用自:https://dba.stackexchange.com/questions/11948