如果我們可以這樣說,Oracle使用序列作爲他的身份列。
如果您爲表主鍵設置了一個序列,還必須編寫一個觸發器,將Sequence.NextValue左右插入到主鍵字段中。
假設你已經熟悉這個概念,只需查詢你的序列,那麼你將得到你的答案。在Oracle中實踐的一點是讓自己成爲一個函數,它將返回一個INT,然後在你的函數中執行INSERT。假設你已經正確設置你的觸發器,你將能夠通過查詢返回序列的值。
這裏有一個實例:
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
如果你要管理的自動遞增自己,這裏是如何:
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
在另一方面,如果你想不關心主按鍵增量,您可以繼續觸發。
CREATE OR REPLACE TRIGGER my_table_insert_trg
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SELECT my_table_seq.NEXTVAL INTO :NEW.id_my_table FROM DUAL;
END;
然後,當你插入,您只需鍵入INSERT語句如下:
INSERT INTO my_table (description) VALUES ("Some other description");
COMMIT;
一個INSERT後,我猜你會想
SELECT my_table_seq.CURRVAL
或像這樣的東西來選擇你的序列的實際值。
這裏有一些鏈接,可以幫助:
http://www.orafaq.com/wiki/Sequence
http://www.orafaq.com/wiki/AutoNumber_and_Identity_columns
希望這有助於!
把這個作爲,因爲它是投機性的,但SQL Server HA「@@ SCOPE_IDENTITY」這樣的語句可以評論「插入FO ....;選擇@@ SCOPE_IDENTITY」 ...... Oracle是否有東西類似? – Rob 2009-08-26 19:23:25
這將是答案:) – andrecarlucci 2009-08-26 19:32:23
爲SQL Server中,我不知道這個系統變量@@ SCOPE_IDENTITY,所以我知道的IDENT_CURRENT標量函數做同樣的(SELECT IDENT_CURRENT(N'TableName') – 2009-09-02 17:20:27