問題:
Oracel 10g 中 創建觸發器時 臨時表是???
CREATE OR REPLACE TRIGGER receivedBook_insert_update
BEFORE INSERT OR UPDATE
ON t_leoa_ReceivedBook
FOR EACH ROW
BEGIN
DECLARE LandNo VARCHAR2(100)
SELECT t_leoa_ReceivedBook.LandInfo_LandNo FROM Dual -- 臨時表
IF LandInfo_LandNo !:= NULL THEN
SELECT LandNo := LandInfo_LandNo FROM t_leoa_BookFlow
WHERE t_leoa_ReceivedBook.LandInfo_LandNo
IF LandNo !:= NULL THEN
UPDATE t_leoa_BookFlow SET LandInfo_LandNo := LandNo+1 WHERE
Flow_ID := (SELECT FLOW_ID FROM t_leoa_BookFlow WHERE LandInfo_LandNo := LandNo)
ELSIF
INSERT INTO t_leoa_BookFlow VALUES(1,FLOW_CURCIRINDEX,FLOW_RECTIME,FLOW_APPLYTIME,
FLOW_REASEARCHTIME,FLOW_FIRSTAUDITTIME,FLOW_BULLETINTIME,FLOW_LASTAUDITTIME,FLOW_REGISTERTIME,
FLOW_SHANZHENGTIME,FLOW_ISSUELANDCERTIFYTIME,FLOW_FTPFOLDERNAME,FLOW_FLAG,LandInfo_LandNo)
END BEFORE ReceivedBook_insert_update;
調試一天還出錯 麻煩高手 幫幫忙 多謝啦!
問題補充:---------收件單觸發器
CREATE OR REPLACE TRIGGER tib_Leoa_ReceivedBook
BEFORE INSERT OR UPDATE ON t_Leoa_ReceivedBook
FOR EACH ROW
DECLARE
land_no VARCHAR2(50); --存儲地籍號
del_flag Integer; --檢測刪除標志
total Integer; --存儲、判斷獲取值
rec_date date; --記錄收件時的日期
add_value integer; --當前操作需要增加或者刪除的值
BEGIN
/*賦予默認值*/
del_flag := 0;
land_no := '';
add_value := 1; --根據對應環節不同該值而不同
/*從臨時表DUAL獲取刪除標志存儲在del_flag 中*/
SELECT :new.Received_Flag INTO del_flag FROM DUAL;
/*從臨時表DUAL獲取的地籍號存儲在land_no中,*/
SELECT :new.Landinfo_Landno INTO land_no FROM DUAL;
/*從臨時表DUAL獲取的收件日期存儲在rec_date中,*/
SELECT :new.Received_ReceivedTime INTO rec_date FROM DUAL;
/*通過LandNo從流程表中檢測流程信息表中是否含有該條記錄的流程信息*/
/*flow_flag=-1表示該條記錄在流程信息表已被邏輯刪除,不再參與實際事務*/
SELECT COUNT(*) INTO total FROM t_leoa_BookFlow t
WHERE t.LandInfo_LandNo = land_no AND t.flow_flag <> -1;
/*如果在流程信息表中有關于該條記錄的流程信息*/
IF total >= 1 THEN
/*開始判斷當前的操作是INSERT還是UPDATE*/
IF inserting THEN
UPDATE t_leoa_BookFlow SET Flow_ProcessValue = Flow_ProcessValue + add_value
WHERE LandInfo_LandNo = land_no AND Flow_flag <> -1;
ELSE
/*如果是UPDATE操作*/
IF(updating and (del_flag = -1)) THEN
UPDATE t_leoa_BookFlow SET Flow_ProcessValue = Flow_ProcessValue - add_value
WHERE LandInfo_LandNo = land_no AND Flow_flag <> -1;
END IF;
END IF;
ELSE
/*如果流程信息表中不存在當前的記錄*/
INSERT INTO t_leoa_BookFlow
values(0,add_value,null,rec_date,null,null,null,null,null,null,null,null,null,del_flag,land_no);
END IF;
END;
回答:
Oracle 中沒有臨時表。
在 Oracle 觸發器中,:new 表示新的行, :old 表示原來舊的行,這兩個變量是系統定義的,可以直接使用。
它們的類型都是記錄型,通過與列同名的屬性來訪問字段的值。
例如,表中有一列為 Name,那么,在刪除或者更新時,訪問原來舊的值使用 :old.name,在插入,或者更新的時候訪問新的值,使用 :new.name 就可以了。
下一篇 XML 解析中,如何排除控制字符