Oracle 数据库 PLSQL 某些字符的子类型

Oracle Database PLSQL Subtype of certain characters

我想在 PLSQL 中创建一个只能保存以下值的子类型:'♠', '♥', '♦', '♣' 这可能吗?在我的代码中,我有 subtype suit_t is char(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;