Oracle 在函數或存儲過程中執行一條插入語句並返回主鍵ID值
阿新 • • 發佈:2017-11-08
num c# 如果 acl get col oracle style 建表語句
有時,我們需要往一張表插入一條記錄,同時返回主鍵ID值。
假定主鍵ID的值都是通過對應表的SEQUENCE來獲得,然後進行ID賦值
這裏有幾種情況需要註意:
1)如果建表語句含有主鍵ID的觸發器,通過觸發器來實現主鍵ID的自增,實現方式如下:
INSERT INTO GP_MONTH_BILL ( MONTH, BONUS_VALUE, CUR_WAY, CUR_TIME, STATUS, IS_USE, CREATE_TIME)VALUES ( CUR_MONTH, CUR_BONUS_VALUE, ‘包函數固化‘, SYSDATE, ‘固化中‘, 1, SYSDATE) RETURNING ID INTO CUR_MONTH_BILL_ID; --CUR_MONTH_BILL_ID為變量,接收返回的ID值
關鍵語法: INSERT INTO TABLE VALUES(,) RETURNING ID INTO VAL
補充:此種情況,觸發器的語句可能如下
CREATE OR REPLACE TRIGGER GPS.TR_EM_FILES before insert on "GPS"."EM_FILES" for each row begin select "GPS"."SQ_EM_FILES".nextval into :new."ID" from dual; end; /
或
oralce12c,主鍵是通過default設置SEQUENCE下一個值
CREATE TABLE C##EM.GP_TARGET_TYPE ( ID NUMBER(19) DEFAULT"C##EM"."ISEQ$$_124895".nextval NOT NULL, --DEFAULT默認值為seq的下個值 NAME NVARCHAR2(50) NOT NULL, REMARK NVARCHAR2(200), CREATE_TIME DATE NOT NULL, CREATE_UID NUMBER(19), DELETE_UID NUMBER(19), DELETE_TIME DATE, IS_DELETE NUMBER(1) NOT NULL, UPDATE_TIME DATE, UPDATE_UID NUMBER(19) )
2)如果主鍵ID的值由用戶自主獲得SEQUENCE的值,然後賦值,實現方式可以如下:
SELECT YOUR_SEQ.NEXTVAL INTO MID_ID FROM DUAL; --MID_ID為變量 INSERT INTO TABLE(ID) VALUES(MID_ID);
補充:此種情況,可以有觸發器,語句可能如下:
CREATE OR REPLACE TRIGGER C##WL.TR_BULLETIN BEFORE INSERT ON C##WL.WL_BULLETIN FOR EACH ROW WHEN ( NEW.ID IS NULL OR NEW.ID = 0 ) BEGIN SELECT WL_BULLETIN_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL; END; /
當前插入的主鍵ID為空值或0時,獲取對應SEQUENCE 的NEXTVAL值來賦值主鍵ID
Oracle 在函數或存儲過程中執行一條插入語句並返回主鍵ID值