반응형
Oracle 저장 프로시저의 "Boolean" 파라미터
Oracle은 매개 변수에 사용할 부울 유형이 없으며, 현재 True/False에 대해 1/0을 가지는 NUMBER 유형을 사용하고 있습니다('Y'/'N' CHAR(1) 접근 방식 대신).
저는 매우 진보된 Oracle 프로그래머는 아니지만, 약간의 탐색 작업을 수행하고 ASKTOM 게시물을 읽은 후 다음과 같은 열의 형식을 사용하여 필드를 제한할 수 있습니다.
MyBool NUMBER(1) CHECK (MyBool IN (0,1))
입력 파라미터에 동일한 종류의 체크 제약을 저장 프로시저에 적용할 수 있는 방법이 있습니까?입력을 받은 후에 명시적으로 확인하는 것이 아니라 가능한 입력을 0 또는 1로 제한하고 싶습니다.
부울란을 저장 프로시저의 파라미터로 사용할 수 있습니다.
procedure p (p_bool in boolean) is...
그러나 SQL에서는 부울란을 사용할 수 없습니다(예: select 문).
select my_function(TRUE) from dual; -- NOT allowed
숫자 매개 변수의 경우 "체크 제약 조건"을 명시적으로 추가할 방법이 없으므로, 예를 들어 몇 가지 검증 코드를 작성해야 합니다.
procedure p (p_num in number) is
begin
if p_num not in (0,1) then
raise_application_error(-20001,'p_num out of range');
end if;
...
한마디로 이야기할 수 없군요.당신은 할 수 있어요..
create or replace package t_bool is
subtype t_bool_num IS PLS_INTEGER RANGE 0..1;
function f_test (i_bool_num t_bool_num) return varchar2;
end t_bool;
/
create or replace package body t_bool is
function f_test (i_bool_num t_bool_num) return varchar2 is
begin
if i_bool_num = 0 then
return 'false';
elsif i_bool_num = 1 then
return 'true';
elsif i_bool_num is null then
return 'null';
else
return to_char(i_bool_num);
end if;
end;
end t_bool;
/
좋은 소식은 만약 당신이 그렇게 한다면
exec dbms_output.put_line(t_bool.f_test(5));
오류를 보고합니다.
나쁜 소식은 만약 당신이 그렇게 한다면
select t_bool.f_test(5) from dual;
그러면 오류가 나지 않습니다.
언급URL : https://stackoverflow.com/questions/4079662/boolean-parameter-for-oracle-stored-procedure
반응형
'programing' 카테고리의 다른 글
ID를 복제하고 변경하는 방법은? (0) | 2023.10.24 |
---|---|
플러그인 없이 워드프레스에서 부트스트랩 회전목마 통합 (0) | 2023.10.24 |
JavaScript를 트리거하는 링크를 클릭하면 웹 페이지가 맨 위로 스크롤되지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.10.24 |
Jest에서의 XMLHttpRequest 테스트 (0) | 2023.10.24 |
데이터 변환 방법javascript로 파일 개체에 URL을 지정하시겠습니까? (0) | 2023.10.24 |