ORACLE多表查詢儲存到新表,新增id自增觸發器
阿新 • • 發佈:2019-01-07
先把需求明確一下,這次需要從其他兩個表(T1,T2)中查詢資料,將其中兩個欄位相同的資料插入到另一張表中(T3),T3的id為主鍵不能為空
由於使用的是oracle,不能把T3的id設定成自增長就多出許多麻煩
為了解決oracle序列自增長的問題 採用了觸發器觸發序列自增長的方式來解決
1.首先建立一條自增長的序列,開始於1,每次增長1
CREATE SEQUENCE TOOLS_GRP_ID START WITH 1 INCREMENT BY 1;2.其次建立觸發器,每次插入資料時都自動的引用序列的id進行新增
CREATE
OR REPLACE TRIGGER TOOLS_GRP BEFORE INSERT ON MES_PRODUCE_TOOLS_GRP_DETAIL FOR EACH ROW
BEGIN
SELECT
TOOLS_GRP_ID.nextval INTO : NEW . ID
FROM
dual ;
END ;
其中INTO : NEW . ID,NEW. 之後的為需要自增長的列名 ,
TOOLS_GRP:觸發器名稱,MES_PRODUCE_TOOLS_GRP_DETAIL:觸發器監聽物件,
TOOLS_GRP_ID:序列名稱 dual虛擬表:是oracle資料庫常用的虛擬表只有一條記錄,沒有實際意義
在編寫觸發器的過程中遇到了[Err] ORA-24344: 成功, 但出現編譯錯誤
在查閱網上相關資料之後,並沒有實際解決 ,但修改列名後不知道怎麼的就有用了,總結有以下可能性
(1)網上有一種可能是資料庫列名大小寫問題,
解決方法:應該所有列名都為大寫
(2)我自己的情況是列名本來都是全大寫的,不存在上一條的情況。
解決方法:首先把表中的ID改為PID防止oracle無法識別,其次,在重新打了一次INTO : NEW . ID 之後編譯成功。
3.查詢T1,T2表格中的資料插入T3,自動觸發觸發器TOOLS_GRP
INSERT INTO MES_PRODUCE_TOOLS_GRP_DETAIL (TOOLS_GRP_ID, TOOLS_ID) SELECTTOOLS_GRP_ID,
TOOLS_ID
FROM
MES_PRODUCE_TOOLS_GRP,
MES_PRODUCE_TOOLS
WHERE
MES_PRODUCE_TOOLS_GRP.TOOLS_GRP_NAME = MES_PRODUCE_TOOLS.JSON
完成需求