Jak korzystać z wyliczeń w Oracle przy użyciu tylko SQL? (Nie PSQL)Jak używać wyliczeń w Oracle?
W MySQL można zrobić:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
Jaki byłby podobny sposób zrobić to w Oracle?
Jak korzystać z wyliczeń w Oracle przy użyciu tylko SQL? (Nie PSQL)Jak używać wyliczeń w Oracle?
W MySQL można zrobić:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
Jaki byłby podobny sposób zrobić to w Oracle?
Czytając trochę o MySQL enum, zgaduję najbliższy odpowiednik byłoby prostą kontrolę ograniczenie
CREATE TABLE sizes (
name VARCHAR2(10) CHECK(name IN ('small','medium','large'))
);
ale nie pozwala odwoływać się do wartości o indeksie. Bardziej skomplikowana relacja klucz obcy byłoby również możliwe
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
Dopóki działają poprzez widzenia, wydaje się, że Twój może replikować funkcjonalność w miarę dobrze.
Teraz, jeśli przyznajesz się do rozwiązań PL/SQL, możesz tworzyć niestandardowe typy obiektów, które mogą zawierać logikę, aby ograniczyć zestaw wartości, które mogą przechowywać, i mieć metody uzyskiwania identyfikatorów i uzyskiwania wartości itp.
Pod tym linkiem można znaleźć alternatywne rozwiązanie/obejście dla Oracle, zainspirowany C teksty stałe językowych: http://www.petefinnigan.com/weblog/archives/00001246.htm
Krótko mówiąc, Pete proponuje zdefiniowanie pewnych stałych całkowitych i używać podtypu ich constrait:
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;
Po tym można zadeklarować zmienne, przekazać parametry i zwrócić wartości z funkcji i tak dalej, z typem COLORS.
, który jest wyraźnie dla PL/SQL (jest w tytule artykułu), a PO wyraźnie powiedział, że potrzebował SQL, a nie PL/SQL. Komentarze na temat odpowiedzi Justina wskazują również, że musi to być praca w wielu bazach danych i nie może korzystać z funkcji specyficznych dla Oracle. –
Jako deweloper, który zaczął się od MySQL i przeniósł się do Oracle, każdego dnia jestem zdumiony, że produktowi korporacyjnemu brakuje zestawu funkcji darmowego produktu bazodanowego. Zastanawiam się, czy istnieje wyraźne uzasadnienie, dlaczego takie typy nie są dostępne w MSSQL lub PL/SQL? –
@JosephLust Jaka jest różnica między wyliczeniem MySQL a Oracle mającym varchar2 z ograniczeniem wyboru? Wydaje się, praktycznie rzecz biorąc, być tym samym, z dodatkową korzyścią, że nie jest to nowy typ danych. Długa lista typów danych kolumnowych jest dość niedorzeczna w MySQL - ponieważ tak wiele z nich musi mieć koszt, przynajmniej koszt utrzymania. – fool4jesus
Masz wyliczenia w MySQL, są one całkiem pomocne :) Dzięki! –
Nie jestem pewien, czy jest bliżej, ale pomyślałem, że go tam wyrzucę. –
Tak, jest bliżej, a także jest to rozwiązanie, z którego aktualnie korzystam, ale po prostu chciałem, żeby był lepszy sposób. –