Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar enums no Oracle?


Lendo um pouco sobre o MySQL enum, acho que o equivalente mais próximo seria uma restrição de verificação simples
CREATE TABLE sizes (
  name VARCHAR2(10) CHECK( name IN ('small','medium','large') )
);

mas isso não permite que você faça referência ao valor pelo índice. Uma relação de chave estrangeira mais complicada também seria possível
CREATE TABLE valid_names (
  name_id   NUMBER PRIMARY KEY,
  name_str  VARCHAR2(10)
);

INSERT INTO valid_sizes VALUES( 1, 'small' );
INSERT INTO valid_sizes VALUES( 2, 'medium' );
INSERT INTO valid_sizes VALUES( 3, 'large' );

CREATE TABLE sizes (
  name_id NUMBER REFERENCES valid_names( name_id )
);

CREATE VIEW vw_sizes
  AS 
  SELECT a.name_id name, <<other columns from the sizes table>>
    FROM valid_sizes a,
         sizes       b
   WHERE a.name_id = b.name_id

Contanto que você opere através da exibição, parece que você pode replicar a funcionalidade razoavelmente bem.

Agora, se você admite soluções PL/SQL, pode criar tipos de objetos personalizados que podem incluir lógica para limitar o conjunto de valores que podem conter e ter métodos para obter os IDs e os valores, etc.