スーパーユーザー/管理者がシステムにログインできるようにするために、次のクエリ(の大きいバージョン)を実行しています。
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
'Admin'を渡すと取得します。
関数を導入すると、ORが短絡の側面を失うのはなぜですか?