Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwende ich Aufzählungen in Oracle?

Wenn ich ein wenig über die MySQL-Enumeration lese, schätze ich, dass das nächste Äquivalent eine einfache Check-Einschränkung wäre

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

aber das erlaubt Ihnen nicht, den Wert durch den Index zu referenzieren. Auch eine kompliziertere Fremdschlüsselbeziehung wäre möglich

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

Solange Sie durch die Ansicht arbeiten, scheint es, dass Sie die Funktionalität einigermaßen gut replizieren können.

Nun, wenn Sie PL/SQL-Lösungen zulassen, können Sie benutzerdefinierte Objekttypen erstellen, die Logik enthalten könnten, um den Satz von Werten zu begrenzen, die sie enthalten können, und um Methoden zum Abrufen der IDs und zum Abrufen der Werte usw. zu haben.