Oracle
 sql >> Database >  >> RDS >> Oracle

Come utilizzare le enumerazioni in Oracle?

Leggendo un po' sull'enumerazione MySQL, suppongo che l'equivalente più vicino sarebbe un semplice vincolo di controllo

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

ma ciò non ti consente di fare riferimento al valore tramite l'indice. Sarebbe anche possibile una relazione di chiave esterna più complicata

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

Finché operi attraverso la vista, sembrerebbe che tu possa replicare la funzionalità abbastanza bene.

Ora, se ammetti soluzioni PL/SQL, puoi creare tipi di oggetti personalizzati che potrebbero includere la logica per limitare l'insieme di valori che possono contenere e avere metodi per ottenere gli ID e per ottenere i valori, ecc.