सभी एसक्यूएल समान नहीं हैं। न तो Oracle और न ही MySQL पहचान के वास्तविक SQL मानक का समर्थन करते हैं।
ओरेकल बैकटिक्स का उपयोग नहीं करता है ... आपको वास्तव में अपने पहचानकर्ताओं को उद्धृत करने की आवश्यकता नहीं है। बेहतर होगा कि आप अनजाने में किसी पहचानकर्ता में अमान्य वर्ण का उपयोग न करें।
Oracle अंकगणित को NUMBER कहा जाता है, और यह एक वैकल्पिक परिशुद्धता और पैमाना ले सकता है।
CREATE TABLE Category
(
id NUMBER(11) NOT NULL,
title VARCHAR2(45) NULL,
PRIMARY KEY (id)
)
AUTO_INCREMENT करने के लिए, एक क्रम बनाएं:
CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;
फिर जब आप टेबल में डालें, तो यह करें:
INSERT INTO category
VALUES (seq_category_id.nextval, 'some title');
इसे स्वचालित रूप से करने के लिए, AUTO_INCREMENT की तरह, सम्मिलित करने से पहले ट्रिगर का उपयोग करें:
-- Automatically create the incremented ID for every row:
CREATE OR REPLACE trigger bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
BEGIN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
END;
या:
-- Allow the user to pass in an ID to be used instead
CREATE OR REPLACE TRIGGER bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
DECLARE
v_max_cur_id NUMBER;
v_current_seq NUMBER;
BEGIN
IF :new.id IS NULL THEN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
ELSE
SELECT greatest(nvl(max(id),0), :new.id) INTO v_max_cur_id FROM category;
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
WHILE v_current_seq < v_max_cur_id
LOOP
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
END LOOP;
END IF;
END;
अब, जहां तक इन अंतरों की खोज करने की बात है, आप अक्सर "ओरेकल पहचान" या "ओरेकल ऑटो_इनक्रिमेंट" जैसी किसी चीज़ की खोज कर सकते हैं यह देखने के लिए कि ओरेकल यह कैसे करता है।