Pertanyaan Bagaimana cara menggunakan enums di Oracle?


Bagaimana Anda menggunakan enums di Oracle menggunakan SQL saja? (Tidak ada PSQL)

Di MySQL Anda dapat melakukan:

CREATE TABLE sizes (
   name ENUM('small', 'medium', 'large')
);

Apa yang akan menjadi cara serupa untuk melakukan ini di Oracle?


32
2017-10-15 01:48


asal


Jawaban:


Membaca sedikit tentang Enum MySQLSaya menduga persamaan terdekat akan menjadi kendala cek sederhana

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

tetapi itu tidak memungkinkan Anda untuk mereferensikan nilai berdasarkan indeks. Hubungan kunci asing yang lebih rumit juga dimungkinkan

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

Selama Anda beroperasi melalui tampilan, tampaknya Anda dapat mereplikasi fungsi tersebut dengan cukup baik.

Sekarang, jika Anda mengakui solusi PL / SQL, Anda dapat membuat jenis objek kustom yang dapat mencakup logika untuk membatasi kumpulan nilai yang dapat mereka pegang dan memiliki metode untuk mendapatkan ID dan untuk mendapatkan nilai, dll.


40
2017-10-15 02:36



Pada tautan ini Anda dapat menemukan solusi alternatif / solusi untuk Oracle, yang terinspirasi oleh bahasa C enums: http://www.petefinnigan.com/weblog/archives/00001246.htm

Singkatnya, Pete menyarankan untuk mendefinisikan beberapa konstanta integer dan menggunakan SUBTYPE untuk mempersempitnya:

RED constant number(1):=1;
GREEN constant number(1):=2;
BLUE constant number(1):=3;
YELLOW constant number(1):=4;

subtype COLORS is binary_integer range 1..4;

Setelah itu Anda dapat mendeklarasikan variabel, melewati parameter dan mengembalikan nilai dari fungsi dan sebagainya, dengan jenis COLORS.


1
2018-02-08 09:04