Pregunta ¿Cómo usar enumeraciones en Oracle?


¿Cómo se utilizan las enumeraciones en Oracle utilizando solo SQL? (Sin PSQL)

En MySQL puedes hacer:

CREATE TABLE sizes (
   name ENUM('small', 'medium', 'large')
);

¿Cuál sería una forma similar de hacer esto en Oracle?


32
2017-10-15 01:48


origen


Respuestas:


Leyendo un poco sobre el Enum de MySQL, Supongo que el equivalente más cercano sería una simple restricción de verificación

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

pero eso no le permite hacer referencia al valor por el índice. Una relación clave extranjera más complicada también sería posible

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 obtener los valores, etc.


40
2017-10-15 02:36



En este enlace, puede encontrar una solución / solución alternativa para Oracle, inspirada en las enum de lenguaje C: http://www.petefinnigan.com/weblog/archives/00001246.htm

En pocas palabras, Pete sugiere definir algunas constantes enteras y usar un SUBTYPE para restringirlas:

RED constant number(1):=1;
GREEN constant number(1):=2;
BLUE constant number(1):=3;
YELLOW constant number(1):=4;

subtype COLORS is binary_integer range 1..4;

Después de eso, puede declarar variables, pasar parámetros y devolver valores de funciones y demás, con el tipo COLORES.


1
2018-02-08 09:04