Типы-перечисления в PL/SQL


Хотел сейчас поискать что-нибудь интересное про варианты реализации типов-перечислений для pl/sql и наткнулся на пост Pete Finnigan: удивительно, что такой серьезный специалист на полном серьезе сравнивает пакеты standard'a и обычные пользовательские - что позволено быку...

Вообще грустно, что нет красивого и удобного решения, применимые варианты скудны, если хочется создать нормальный тип-перечисление с возможностью использования вроде:
declare
var my_typelist;
begin
 var:= my_typelist.value1;
end;



все что более менее приближенно к этому:
1. создание пакета типа my_typelist_values с константами - тогда можно использовать так:
declare
var my_typelist;
begin
 var:= my_typelist_values.value1;
end;



2. создание типа и объекта - аналог пакета с константами

3. создание объекта my_typelist:
create or replace type my_typelist as object (
  value integer,
  static function value1 return my_typelist,
  static function value2 return my_typelist
)
/
create or replace type body my_typelist as
  static function value1 return my_typelist as
  begin
     return my_typelist(1);
  end;
  static function value2 return my_typelist as
  begin
     return my_typelist(2);
  end;
end;
/


и использовать:
declare
 var my_typelist;
begin
 var:=my_typelist.value1;
 dbms_output.put_line(var.value);
end;



В общем, жаль... Остается надеяться, что в будущем oracle все-таки сделает нормальные enum'ы...

Comments

Отправить комментарий