Pour autoriser un Super User/Admin pour me connecter à mon système, je suis en cours d'exécution (une version plus grande) cette requête:Pas de court-circuit OU avec une fonction Oracle?
Select *
From mytable
Where (:id = 'Admin' Or :id = mytable.id);
Si je passe un nom d'utilisateur, je reçois toutes les données pour cet utilisateur; si je passe la chaîne 'Admin' j'obtiens tous les données. Cela fonctionne parce que Oracle est un short-circuit operator.
Cependant, si je fais « Admin » une constante de l'emballage et l'obtenir avec une fonction, comme celui-ci
Select *
From mytable
Where (:id = mypackage.GetAdminConstant Or :id = mytable.id);
je reçois ORA-01722: invalid number
quand je passe « Admin ».
Pourquoi OU perdre son aspect de court-circuit lorsque j'introduis une fonction?
double possible de [SGBD modernes comprennent Est-ce l'évaluation booléenne court-circuit?] (Http://stackoverflow.com/questions/6960767/do-modern-dbms-include-short-circuit-boolean-evaluation) –
Pas vraiment. La documentation que je peux trouver indique que c'est * un court-circuit; cela semble être une exception à la règle, et j'aimerais savoir pourquoi. –
Qu'est-ce que ': id' (est-ce un bind ???) et de quel type est' mypackage.GetAdminConstant'? –