当前位置:首页 » 存储配置 » mergeinto存储过程

mergeinto存储过程

发布时间: 2023-05-27 01:34:08

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

热点内容
李字加工编程 发布:2025-02-07 11:23:50 浏览:878
linux安全运维 发布:2025-02-07 11:14:19 浏览:735
阿里云集群服务器 发布:2025-02-07 11:12:38 浏览:451
如何选择家庭最佳配置 发布:2025-02-07 11:06:50 浏览:87
javatomcat服务器搭建服务器 发布:2025-02-07 10:55:22 浏览:622
vcenter存储器集群 发布:2025-02-07 10:54:31 浏览:583
咖啡的脚本 发布:2025-02-07 10:46:18 浏览:521
nsftp速度 发布:2025-02-07 10:30:58 浏览:431
存储过程ifor 发布:2025-02-07 10:25:28 浏览:434
命令行执行oracle脚本文件命令行 发布:2025-02-07 10:14:49 浏览:97