sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar enumeraciones en Oracle?

Al leer un poco sobre la enumeración de MySQL, supongo que el equivalente más cercano sería una restricción de verificación simple

CREATE TABLE sizes (
  name VARCHAR2(10) CHECK( name IN ('small','medium','large') )
);

pero eso no le permite hacer referencia al valor por el índice. También sería posible una relación de clave externa más complicada

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

Mientras opere a través de la vista, parecería que podría replicar la funcionalidad razonablemente bien.

Ahora, si admite soluciones PL/SQL, puede crear tipos de objetos personalizados que podrían incluir lógica para limitar el conjunto de valores que pueden contener y tener métodos para obtener los ID y los valores, etc.