要允許超級用戶/管理員登錄到我的系統,我運行(一臺放大版)這個查詢:沒有短路或與Oracle功能?
Select *
From mytable
Where (:id = 'Admin' Or :id = mytable.id);
如果我通過一個用戶ID,我得到該用戶的所有數據;如果我傳遞字符串'Admin',我會得到全部的數據。 這是可行的,因爲Oracle的OR是short-circuit operator。
但是,如果我做「管理」一攬子不變,並用功能得到它,這樣
Select *
From mytable
Where (:id = mypackage.GetAdminConstant Or :id = mytable.id);
我得到ORA-01722: invalid number
當我通過「管理員」。
爲什麼OR引入功能時會失去短路方面?
的可能重複[做現代DBMS包括短路布爾評價?(http://stackoverflow.com/questions/6960767/do-modern-dbms-include-short-circuit-boolean-evaluation) –
不是。我可以找到的文件說它*是*短路;這似乎是一個例外的規則,我想知道爲什麼。 –
什麼是':id'(是一個綁定???),什麼類型是'mypackage.GetAdminConstant'? –