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 检查系统工号。