2017-11-21 12 views
2

이 값만 보유 할 수있는 PLSQL의 부속 유형을 만들고 싶습니다. '♠', '♥', '♦', '♣' 가능합니까? 내 코드에는 subtype suit_t is char(1)이 있지만이 코드를 사용하면이 하위 유형이있는 변수에 다른 문자를 저장할 수 있습니다. 그리고 그래 .. 내 사용자는 꽤 바보 같아서 내가 그렇게하도록 제한하고 싶다.Oracle Database PLSQL 특정 문자의 서브 유형

+5

왜 단순히 점검 제한 조건으로 열을 정의 다음은 예입니다? –

답변

1

하위 유형으로 직접 처리 할 수 ​​없다고 생각합니다.

내 조언은 패키지에서 상수를 사용하는 것입니다.

이제
create or replace package P_SUIT is 
    -- Purpose : Handle possible chars 
    -- Public type declarations 
    --type <TypeName> is <Datatype>; 

    -- Public constant declarations 
    SPADES constant char:='♠'; 
    HEARTS constant char:='♥'; 
    CLUBS constant char:='♣'; 
    DIAMONDS constant char:='♦'; 

    -- Public variable declarations 
    --<VariableName> <Datatype>; 

    -- Public function and procedure declarations 
    function validate(c char) return boolean; 

end P_SUIT; 

create or replace package body P_SUIT is 
    -- Private type declarations 
    --type <TypeName> is <Datatype>; 

    -- Private constant declarations 
    --<ConstantName> constant <Datatype> := <Value>; 

    -- Private variable declarations 
    --<VariableName> <Datatype>; 

    -- Function and procedure implementations 
    function validate(c char) return boolean is 
    ret_val boolean := false; 
    begin 
    if c = P_SUIT.SPADES or c = P_SUIT.HEARTS or c = P_SUIT.CLUBS or c = P_SUIT.DIAMONDS then 
     ret_val := true; 
    else 
     ret_val := false; 
    end if; 
    return(ret_val); 
    end; 

begin 
    -- Initialization 
    --<Statement>; 
    null; 
end P_SUIT; 

이 당신의 PLSQL 조건에서 사용하기 :

begin 
    if p_suit.validate('o') then 
     dbms_output.put_line('yes'); 
    else dbms_output.put_line('no'); 
    end if; 
    if p_suit.validate('♠') then 
     dbms_output.put_line('yes'); 
    else dbms_output.put_line('no'); 
    end if; 
    if p_suit.validate(p_suit.HEARTS) then 
     dbms_output.put_line('yes'); 
    else dbms_output.put_line('no'); 
    end if; 
end;