Sybase
什麼時候返回確定性的結果,什麼時候不是?
如果你執行這樣的語句:
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,任何行都可以首先返回。所以它是非確定性的,因為每次執行查詢時第一條記錄都會發生變化。
將它包裝在一個塊中不會使答案具有確定性,它只會隱藏警告。
我相信基表中的任何選擇語句都是不確定的,因為數據可以在呼叫之間發生變化。