首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PL/SQL中创建枚举类型?

如何在PL/SQL中创建枚举类型?
EN

Stack Overflow用户
提问于 2011-12-14 14:51:28
回答 4查看 17.9K关注 0票数 6

例如,我想创建自己的Boolean类型,并将其命名为Bool。我该怎么做?

或者交通信号灯的类型,即只有红色、黄色、绿色(当然还有null )。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-14 22:15:26

我能想到的最接近的想法是:

代码语言:javascript
复制
create or replace type lights as object
(
  red varchar2(8),
  yellow varchar2(8),
  green varchar2(8),
constructor function lights return self as result
)

和身体:

代码语言:javascript
复制
create or replace type body lights is
constructor function lights return self as result is
begin
  self.red = 'red';
  self.yellow = 'yellow';
  self.green = 'green';
  return;
end;
end;

然后你可以在代码中使用它:

代码语言:javascript
复制
declare
l lights := new lights;
begin
   dbms_output.put_line(l.red);
end;
票数 4
EN

Stack Overflow用户

发布于 2014-07-10 20:39:06

我不认为A.B.Cade提供的解决方案是完全正确的。让我们假设过程如下:

procedure TestEnum(enum_in lights);

enum_in的价值是什么?红色?黄色?绿色?

我提出了另一种解决方案。以下是包的示例

代码语言:javascript
复制
CREATE OR REPLACE PACKAGE pkg_test_enum IS

  SUBTYPE TLight IS BINARY_INTEGER RANGE 0..2;
  Red CONSTANT TLight := 0;
  Yellow CONSTANT TLight := 1;
  Green CONSTANT TLight := 2;

  --get sting name for my "enum" type
  FUNCTION GetLightValueName(enum_in TLight) RETURN VARCHAR2;

  PROCEDURE EnumTest(enum_in TLight);

END pkg_test_enum;


CREATE OR REPLACE PACKAGE BODY pkg_test_enum IS 
  FUNCTION GetLightValueName(enum_in TLight) 
  RETURN VARCHAR2
  IS
    ResultValue VARCHAR2(6);
  BEGIN
    CASE enum_in 
      WHEN Red THEN ResultValue := 'Red';
      WHEN Green THEN ResultValue := 'Green';
      WHEN Yellow THEN ResultValue := 'Yellow';
      ELSE ResultValue := '';
    END CASE;
    RETURN ResultValue;
  END GetLightValueName;


  PROCEDURE EnumTest(enum_in TLight)
  IS
  BEGIN
    --do stuff
    NULL;
  END EnumTest;
END pkg_test_enum;

我现在可以在不同的包中使用TLight了。我现在可以根据预定义的值或null测试enum_in

下面是用法示例

代码语言:javascript
复制
begin
  pkg_test_enum.EnumTest(pkg_test_enum.Red);
end;

此外,您可以使此类型不可为空。

SUBTYPE TLight IS BINARY_INTEGER RANGE 0..2 NOT NULL;

票数 11
EN

Stack Overflow用户

发布于 2011-12-14 21:18:52

This blog describes a way to do it using constant values

除了常量之外,博客还为有效颜色定义了一个子类型。

代码语言:javascript
复制
SQL> declare
  2  RED constant number(1):=1;
  3  GREEN constant number(1):=2;
  4  BLUE constant number(1):=3;
  5  YELLOW constant number(1):=4;
  6  --
  7  VIOLET constant number(1):=7;
  8  --
  9  subtype colors is binary_integer range 1..4;
 10  --
 11  pv_var colors;
 12  --
 13  function test_a (pv_var1 in colors) return colors
 14  is
 15  begin
 16     if(pv_var1 = YELLOW) then
 17             return(BLUE);
 18     else
 19             return(RED);
 20     end if;
 21  end;
 22  --
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8500515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档