मैं इस प्रश्न पर अधिक पृष्ठभूमि नहीं होने के लिए क्षमा चाहता हूं, लेकिन मुझे हमारे कुछ Oracle प्रश्नों को वर्टिका सिंटैक्स में बदलने का काम सौंपा गया है और मुझे GENERATED ALWAYS Oracle कमांड के आसपास के दस्तावेज़ीकरण को समझने में परेशानी हो रही है क्योंकि यह केस स्टेटमेंट से संबंधित है .

मैंने जो पाया है, ऐसा लगता है कि ओरेकल में GENERATED ALWAYS वर्टिका में AUTO INCREMENT के बराबर है।

यहां एक केस स्टेटमेंट का उदाहरण दिया गया है जिसे मुझे वर्टिका में फिर से लिखना है। पहली नज़र में, ऐसा लगता है कि यह सिर्फ एक उपनाम का उपयोग करने के लिए कह रहा है, लेकिन मुझे यकीन नहीं है कि मैं इसे ठीक से समझ रहा हूं।

FIELD_NAME varchar2(25) GENERATED ALWAYS as(
      case "FIELD_NAME"
        when 'ABC'
        then 'ABC / Category_ABC'
        when 'DEF'
        then 'DEF / Category_DEF'
        else 'Other'
      end)

क्या यह अनिवार्य रूप से वही होगा? क्या केवल GENERATED ALWAYS पीस को हटाना सुरक्षित है? या यहाँ कुछ बड़ा हो रहा है?

FIELD_NAME varchar2(25) as(
      case "FIELD_NAME"
        when 'ABC'
        then 'ABC / Category_ABC'
        when 'DEF'
        then 'DEF / Category_DEF'
        else 'Other'
      end)
0
phenderbender 10 जिंदा 2020, 19:24

1 उत्तर

सबसे बढ़िया उत्तर

यह किसी भी तरह से एक प्रश्न, संदर्भ, फेंडरबेंडर नहीं है। यह एक डेटा परिभाषा संदर्भ है। हमेशा उत्पन्न या डिफ़ॉल्ट द्वारा उत्पन्न एक स्तंभ विशेषता है जिसे आप तब परिभाषित करते हैं जब आप या तो कोई तालिका बनाते हैं, या किसी स्तंभ को बनाने या संशोधित करने के लिए तालिका में परिवर्तन करते हैं।

इसके लिए वर्टिका का सिंटैक्स कॉलम परिभाषा का DEFAULT क्लॉज है।

अगर मैं Oracle दस्तावेज़ को यहाँ देखता हूँ:

https://oracle-base.com/articles/11g/virtual-columns-11gr1

मैं उनका उदाहरण वर्टिका में इस तरह लिखूंगा:

CREATE TABLE employees (
  id          INTEGER,
  first_name  VARCHAR(10),
  last_name   VARCHAR(10),
  salary      NUMERIC(9,2),
  comm1       NUMERIC(3),
  comm2       NUMERIC(3),
  salary1     NUMERIC(9,2) DEFAULT (ROUND(salary*(1+comm1/100),2)),
  salary2     NUMERIC(9,2) DEFAULT (ROUND(salary*(1+comm2/100),2)),
  CONSTRAINT employees_pk PRIMARY KEY (id)
);

INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2)
VALUES (1, 'JOHN', 'DOE', 100, 5, 10);

INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2)
VALUES (2, 'JAYNE', 'DOE', 200, 10, 20);
COMMIT;

SELECT * FROM employees;
-- out  id | first_name | last_name | salary | comm1 | comm2 | salary1 | salary2 
-- out ----+------------+-----------+--------+-------+-------+---------+---------
-- out   1 | JOHN       | DOE       | 100.00 |     5 |    10 |  105.00 |  110.00
-- out   2 | JAYNE      | DOE       | 200.00 |    10 |    20 |  220.00 |  240.00
-- out (2 rows)
-- out 
-- out Time: First fetch (2 rows): 182.567 ms. All rows formatted: 182.674 ms
1
marcothesane 13 जिंदा 2020, 23:40