为了允许超级用户/管理员登录到我的系统,我正在运行(更大版本的)这个查询:
Select *
From mytable
Where (:id = 'Admin' Or :id = mytable.id);
如果我传递一个用户 ID,我将获得该用户的所有数据;如果我传递字符串'Admin',我会得到所有数据。这是因为 Oracle 的 OR 是短路运算符。
但是,如果我将“Admin”设为包常量并使用函数获取它,就像这样
Select *
From mytable
Where (:id = mypackage.GetAdminConstant Or :id = mytable.id);
ORA-01722: invalid number
当我通过“管理员”时,我得到了。
当我引入一个函数时,为什么 OR 会失去它的短路特性?