我想在PLSQL中创建一个只能保存这个值的子类型:'♠', '♥', '♦', '♣'
这可能吗?在我的代码中,我有subtype suit_t is char(1)
但是使用此代码可以将其他字符存储在具有此子类型的变量中。是的..我的用户非常愚蠢,所以我想限制他们这样做。
答案 0 :(得分: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;