执行merge into 时报错解决办法

在尝试使用Oracle的MERGE INTO语句进行数据整合时遇到了错误。本文详细记录了遇到的问题,包括错误信息的解析,以及如何通过调整SQL语句、检查数据源一致性等方法成功解决问题。通过实例分享了解决此类问题的关键步骤和注意事项。
经确认,merge into的sql语句涉及的目标表上的确添加了访问控制策略:ACLINSERT、ACLQUERY、ACLUPDATE, 
但是,merge into语句使用要求insert、delete、update同时支持,所以merge into 语句执行报错ORA-28132。 
解决方法: 
1、为merge into涉及的目标表添加ACLDELETE策略: 
BEGIN
   DBMS_RLS.add_policy (object_schema   => 'BMI',
                        object_name     => 'DW_BILLDETAIL',
                        policy_name     => 'ACLDELETE',
                        function_schema => 'BMI',
                        policy_function => 'F_LIMITED_DELETE_DW_BILLDETAIL');--需要根据需求自定义
END;
/

2、删除merge into涉及的目标表上添加的访问控制策略: 
BEGIN
   DBMS_RLS.drop_policy (object_schema   => 'BMI',
                         object_name     => 'DW_BILLDETAIL',
                         policy_name     => 'ACLUPDATE');
END;
/

BEGIN
   DBMS_RLS.drop_policy (object_schema   => 'BMI',
                         object_name     => 'DW_BILLDETAIL',
                         policy_name     => 'ACLINSERT');
END;
/



BEGIN
   DBMS_
sql语句报Error updating database. Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "merge",sql如下:MERGE INTO event_alarm_type e USING ( <foreach collection="list" item="item" separator=" UNION ALL "> SELECT #{item.alarmTypeKey} AS alarmTypeKey, #{item.alarmType} AS alarmType, #{item.affiliation} AS affiliation, #{item.affiliationKey} AS affiliationKey, #{item.affiliationCategory} AS affiliationCategory, #{item.affiliationCategoryKey} AS affiliationCategoryKey, #{item.status} AS status, #{item.alarmGrade} AS alarmGrade, #{item.alarmStorm} AS alarmStorm, #{item.isSave} AS isSave, #{item.failure} AS failure, #{item.urlNameKey} AS urlNameKey </foreach> ) s ON (e.ALARM_TYPE = s.alarmType AND e.AFFILIATION = s.affiliation) WHEN MATCHED THEN UPDATE SET ALARM_TYPE_KEY = s.alarmTypeKey, AFFILIATION_KEY = s.affiliationKey, AFFILIATION_CATEGORY = s.affiliationCategory, AFFILIATION_CATEGORY_KEY = s.affiliationCategoryKey, `STATUS` = s.status, ALARM_GRADE = s.alarmGrade, ALARM_STORM = s.alarmStorm, IS_SAVE = s.isSave, FAILURE = s.failure, URL_NAME_KEY = s.urlNameKey WHEN NOT MATCHED THEN INSERT (ALARM_TYPE_KEY, ALARM_TYPE, AFFILIATION, AFFILIATION_KEY, AFFILIATION_CATEGORY, AFFILIATION_CATEGORY_KEY, `STATUS`, ALARM_GRADE, ALARM_STORM, IS_SAVE, FAILURE, URL_NAME_KEY) VALUES (s.alarmTypeKey, s.alarmType, s.affiliation, s.affiliationKey, s.affiliationCategory, s.affiliationCategoryKey, s.status, s.alarmGrade, s.alarmStorm, s.isSave, s.failure, s.urlNameKey);
最新发布
08-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值