Oracle Database PLSQL某些字符的子类型

时间:2017-11-21 07:22:57

标签: oracle plsql subtype

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

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;