Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment utiliser les énumérations dans Oracle ?

En lisant un peu l'énumération MySQL, je suppose que l'équivalent le plus proche serait une simple contrainte de vérification

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

mais cela ne vous permet pas de référencer la valeur par l'index. Une relation de clé étrangère plus compliquée serait également possible

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

Tant que vous opérez via la vue, il semblerait que vous puissiez raisonnablement bien reproduire la fonctionnalité.

Maintenant, si vous admettez les solutions PL/SQL, vous pouvez créer des types d'objets personnalisés qui pourraient inclure une logique pour limiter l'ensemble de valeurs qu'ils peuvent contenir et pour avoir des méthodes pour obtenir les ID et pour obtenir les valeurs, etc.