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

Hvordan bruger man enums i Oracle?

Når jeg læser lidt om MySQL-oversigten, gætter jeg på, at den nærmeste ækvivalent ville være en simpel kontrolbegrænsning

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

men det tillader dig ikke at referere værdien ved indekset. Et mere kompliceret udenlandsk nøgleforhold ville også være muligt

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

Så længe du opererer gennem visningen, ser det ud til, at du kan kopiere funktionaliteten rimeligt godt.

Hvis du nu indrømmer PL/SQL-løsninger, kan du oprette brugerdefinerede objekttyper, der kunne inkludere logik for at begrænse det sæt af værdier, de kan indeholde, og for at have metoder til at hente ID'erne og til at hente værdierne osv.



  1. Sådan fungerer OCTET_LENGTH()-funktionen i MySQL

  2. Eksempler på konvertering af 'smalldatetime' til 'datetime' i SQL Server (T-SQL)

  3. Kunsten at isolere afhængigheder og data i databaseenhedstestning

  4. Oracle (Gamle?) Joins - Et værktøj/script til konvertering?