, 나는이 쿼리를 (의 더 큰 버전)을 실행하고 슈퍼 사용자가/관리자가 내 시스템에 로그인 할 수 있도록하려면 다음Oracle 기능과의 단락 OR이 없습니까?
Select *
From mytable
Where (:id = 'Admin' Or :id = mytable.id);
내가 해당 사용자의 모든 데이터를 얻을 수있는 사용자 ID를 전달하는 경우; 'Admin'문자열을 전달하면 모두 데이터를 얻습니다. 오라클의 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'입니까? –