2017-11-21 2 views
2

Ich möchte einen Untertyp in PLSQL machen, der nur diese Werte enthalten kann: '♠', '♥', '♦', '♣' Ist das möglich? In meinem Code habe ich subtype suit_t is char(1), aber mit diesem Code ist es möglich, andere Zeichen in einer Variablen mit diesem Subtyp zu speichern. Und ja .. meine Benutzer sind ziemlich dumm, also möchte ich sie darauf beschränken.Oracle Database PLSQL Subtyp bestimmter Zeichen

+5

Warum nicht einfach definieren Sie die Spalte mit einer Check-Einschränkung? –

Antwort

1

Ich glaube nicht, dass es möglich ist, dies direkt als Untertyp zu tun.

Mein Rat dafür ist eine Konstante in einem Paket zu verwenden. Hier ein Beispiel:

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; 

Jetzt ist es in Ihren PLSQL Bedingungen zu verwenden:

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;