sql >> Database >  >> RDS >> Oracle

Hoe gebruik je opsommingen in Oracle?

Als ik wat lees over de MySQL-enum, vermoed ik dat het dichtstbijzijnde equivalent een eenvoudige controlebeperking zou zijn

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

maar dat staat u niet toe om naar de waarde te verwijzen door de index. Een meer gecompliceerde externe sleutelrelatie zou ook mogelijk zijn

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

Zolang je door de weergave werkt, lijkt het erop dat je de functionaliteit redelijk goed kunt repliceren.

Als u nu PL/SQL-oplossingen toestaat, kunt u aangepaste objecttypen maken die logica kunnen bevatten om de reeks waarden die ze kunnen bevatten te beperken en om methoden te hebben om de ID's en de waarden te krijgen, enz.



  1. SQLite-gegevens weergeven in RecyclerView

  2. Database-omschakeling en failover voor Drupal-websites met MySQL of PostgreSQL

  3. Introductie van nieuwe functie - Spotlight Cloud Database-groeirapport

  4. date_trunc 5 minuten interval in PostgreSQL