2008-10-15 14 views
31

आप केवल एसक्यूएल का उपयोग करते हुए ओरेकल में enums का उपयोग कैसे करते हैं? (कोई psql)ओरेकल में enums का उपयोग कैसे करें?

MySQL में आप कर सकते हैं:

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

क्या Oracle में यह करने के लिए एक समान तरीके से हो सकता है?

उत्तर

37

MySQL enum के बारे में थोड़ा पढ़ना, मैं सबसे करीब बराबर अनुमान लगा रहा हूँ एक साधारण जांच बाधा

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

होगा, लेकिन है कि आप सूचकांक द्वारा मूल्य संदर्भ के लिए अनुमति नहीं है। एक और अधिक जटिल विदेशी कुंजी रिश्ते भी संभव होगा

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 

जब तक आप दृश्य के माध्यम से संचालित करने के रूप में, यह प्रतीत होता है कि आपके समुचित रूप से कार्यक्षमता को दोहराने सकता है।

अब, यदि आप पीएल/एसक्यूएल समाधान स्वीकार करते हैं, तो आप कस्टम ऑब्जेक्ट प्रकार बना सकते हैं जिसमें वे मूल्यों के सेट को सीमित करने के लिए तर्क शामिल कर सकते हैं और आईडी प्राप्त करने और मूल्य प्राप्त करने के तरीके हैं।

+0

आपके पास MySQL में एम्स हैं, वे काफी उपयोगी हैं :) धन्यवाद वैसे भी! –

+0

यह सुनिश्चित नहीं है कि यह कोई करीब है, लेकिन मुझे लगा कि मैं इसे वहां फेंक दूंगा। –

+0

हां यह करीब है, और यह भी समाधान है जिसका मैं वर्तमान में उपयोग कर रहा हूं, लेकिन सिर्फ एक बेहतर तरीका था –

1

आप ओरेकल के लिए एक वैकल्पिक समाधान/वैकल्पिक हल पा सकते हैं इस लिंक पर, सी भाषा enums से प्रेरित:

: http://www.petefinnigan.com/weblog/archives/00001246.htm

कुछ ही समय में कहें, पीट कुछ पूर्णांक स्थिरांक को परिभाषित करने के लिए और उन्हें 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; 

इसके बाद आप रंगों को टाइप करने के साथ चर, पास पैरामीटर और कार्यों से मूल्यों को वापस कर सकते हैं।

+2

जो स्पष्ट रूप से पीएल/एसक्यूएल (यह लेख शीर्षक में है) के लिए है, और ओपी ने विशेष रूप से कहा कि उसे एसक्यूएल की आवश्यकता है और पीएल/एसक्यूएल नहीं है। जस्टिन के उत्तर पर टिप्पणियों का भी उल्लेख है कि कई डेटाबेस में काम करना है और ओरेकल-विशिष्ट विशेषताओं का उपयोग नहीं कर सकता है। –

+2

एक देव के रूप में जो MySQL के साथ शुरू हुआ और ओरेकल में चले गए, हर रोज मुझे आश्चर्य हुआ कि एंटरप्राइज़ उत्पाद में मुफ्त डेटाबेस उत्पाद के फीचर सेट की कमी है। मुझे आश्चर्य है कि एमएसएसएलएल या पीएल/एसक्यूएल में ऐसे प्रकार क्यों उपलब्ध नहीं हैं, इसके लिए स्पष्ट प्रदर्शन औचित्य है? –

+0

@ जोसेफलस्ट माईएसक्यूएल एनम और ओरेकल के बीच चेक बाधा वाले वर्चर 2 के बीच क्या अंतर है? वे एक ही बात होने के लिए व्यावहारिक रूप से बोलते हैं, अतिरिक्त लाभ के साथ कि यह एक नया डेटा प्रकार नहीं है। स्तंभ डेटा प्रकारों की लंबी सूची MySQL में काफी हास्यास्पद है - कम से कम एक रखरखाव लागत होने के कारण बहुत से लोगों को लागत है। – fool4jesus

संबंधित मुद्दे