sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man enums i Oracle?

När jag läser lite om MySQL-uppräkningen antar jag att den närmaste motsvarigheten skulle vara en enkel kontrollbegränsning

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

men det tillåter dig inte att referera till värdet med indexet. Ett mer komplicerat förhållande med främmande nyckel skulle också vara möjligt

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 använder vyn verkar det som att du kan replikera funktionen ganska bra.

Nu, om du accepterar PL/SQL-lösningar, kan du skapa anpassade objekttyper som kan inkludera logik för att begränsa uppsättningen värden de kan hålla och för att ha metoder för att få ID:n och för att få värdena, etc.



  1. 3 sätt att returnera rader som innehåller alfanumeriska tecken i SQL Server

  2. Hur skulle jag få psycopg2-loggning av frågekörningstiden?

  3. SQL Server Internals:Plan Caching Pt. II – Sammanställning av planer

  4. Använd Skapa uttalande för att skapa tabell i SQL Server - SQL Server / T- SQL Tutorial Del 34