mergeinto存儲過程
1. oracle存儲過程 使用游標 比對臨時表和業務表兩張表 相同數據找出來 做標記 在插入臨時表中
使用merge into就可以了。
示例
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);
2. Oracle 存儲過程面試題
sql">提供參考
DECLARE
BEGIN
mergeINTOt17_organt1
USINGt40_organt2
ONt1.organno=t2.organno
WHENmatchedTHEN
UPDATE
SETt1.organname=t2.organname,
t1.organlevel=t2.organlevel,
t1.uporgankey=t2.uporgankey,
t1.flag=t2.flag;
COMMIT;
END;
/
3. sqlserver 存儲過程大批量數據插入
可使用Merge Into 語句完成操作。
具體用法參考文章:http://www.cnblogs.com/biwork/p/3370335.html
4. 寫一個oracle存儲過程
大致寫了下,需要藉助一個臨時表,所有的更新在臨時中進行,最後合並到正式表中,代碼如下,可以根據實際的業務邏輯改一下,供參考
--首先創建臨時表
createtableODS_TRANS_TMPas
select*fromODS_TRANSwhere1=2;
--下面為更新的存儲過程
createorreplaceprocerep_update_opp_acctis
begin
--向臨時表寫入數據
insertintoODS_TRANS_TMP--將需要更新的記錄,插入到臨時表
select*
fromODS_TRANSt
whereDR_CR_FLAG=1
andOPP_ACCT_NUMisnull
andTRANS_IDin(select1
from(selectTRANS_ID,TRANS_DT
fromODS_TRANS
whereOPP_ACCT_NUMisnull
groupbyTRANS_ID,TRANS_DT
havingcount(1)=2)a--首先找到對方賬號為空的記錄,按TRANS_ID,TRANS_DT分組,必須同時為2條
wheret.TRANS_ID=a.TRANS_ID
andt.TRANS_DT=a.TRANS_DT);
--臨時表中,更新對方賬號欄位
mergeintoODS_TRANS_TMPa
using(selectTRANS_ID,TRANS_DT,ACCT_NUM
fromODS_TRANS_TMP
whereDR_CR_FLAG=1)b
on(a.DR_CR_FLAG=0anda.TRANS_ID=b.TRANS_IDanda.TRANS_DT=b.TRANS_DT)
whenmatchedthen
updateseta.OPP_ACCT_NUM=b.ACCT_NUM;
mergeintoODS_TRANS_TMPa
using(selectTRANS_ID,TRANS_DT,ACCT_NUM
fromODS_TRANS_TMP
whereDR_CR_FLAG=0)b
on(a.DR_CR_FLAG=1anda.TRANS_ID=b.TRANS_IDanda.TRANS_DT=b.TRANS_DT)
whenmatchedthen
updateseta.OPP_ACCT_NUM=b.ACCT_NUM;
--臨時表合並到正式表
mergeintoODS_TRANSa
usingODS_TRANS_TMPb
on(a.TRANS_ID=b.TRANS_IDanda.TRANS_DT=b.TRANS_DTanda.DR_CR_FLAG=b.DR_CR_FLAG)
whenmatchedthen
updateseta.OPP_ACCT_NUM=b.OPP_ACCT_NUM;
--刪除臨時表中的數據
deletefromODS_TRANS_TMP;
commit;
exception
whenothersthen
rollback;
end;
5. 在存儲過程裡面使用mergeinto出錯了,看不出來哪裡錯了
merge into RoomType a using #RoomType b
on b.TypeName=a.TypeName
when matched then
update a --這個a不能要
set a.TypePrice=b.TypePrice
where b.TypeName=a.TypeName
when not matched then
insert into RoomType (這老燃個表好含氏名也不能友散加) values(@TypeName,@TypePrice,@IsTv,@IsKongTiao,
@Remark)
6. 存儲過程優化oracle,merge into 表全表和查詢表一部分哪個效率高
merge into主要是要將a與using的表進行一一對比,隨著a表的增大,using後的表查詢的改如渣速度在變慢,主要優化select *from a inner join b on a.id=b.id這條查詢,因為a表在不斷增大,b表的大小如何橡畢,二者的連接關系核悄是什麼,通過執行計劃可以看出。
7. Oracle使用merge into 編寫存儲過程 遇編譯錯誤:PL/SQL: ORA-00926: 缺失 VALUES 關鍵字
Oracle使用猜碼掘merge into 編寫存儲過程 遇編譯錯誤,是設置錯誤造成的,解決方法如下:
1、首先穗核新建存儲過程,Create or ReplaceProcere CHK_SYS_EMP 檢查系統工號。