2017-11-21 12 views
2

私はこれだけの値を保持することができますPLSQLでサブタイプを作りたい:'♠', '♥', '♦', '♣'これは可能ですか?私のコードではsubtype suit_t is char(1)がありますが、このコードでは、このサブタイプの変数に他の文字を格納することができます。そして、ええ、私のユーザーはかなりばかだから、そうするように制限したいのです。特定の文字のOracleデータベース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; 
関連する問題