要允许超级用户/管理员登录到我的系统,我运行(一台放大版)这个查询:没有短路或与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'? –