/*+ BYPASS_UJVC*/

本文介绍了在Oracle数据库中使用隐式更新表(implicit update table)的方法及注意事项。特别是当涉及具有唯一性约束的表时的操作细节,并展示了如何通过使用hints来绕过唯一性检查以提高效率。

 在使用implict update table 时,oracle会自动检查唯一性约束,因此关联的2张表的字段一定要有唯一性约束,否则会报错!但是可以使用hints:/*+ BYPASS_UJVC*/ 屏蔽掉对唯一性的检查。具体测试过程如下: 

create table student(
   student_id number,
   name varchar2(30),
   birthday date,
   sex char(1),
   constraints pk_student_id primary key(student_id)
);

insert into student(student_id, name, birthday, sex) values ('2', '高伟刚',
                    to_date('1991-01-09', 'yyyy-mm-dd'), 'M');
insert into student(student_id, name, birthday, sex) values ('3', '高红成',
                    to_date('1991-01-02', 'yyyy-mm-dd'), 'M');
insert into student(student_id, name, birthday, sex) values ('4', '彭传志',
                    to_date('1991-01-24', 'yyyy-mm-dd'), 'M');

create table teacher(
   teacher_id number unique,
   name varchar2(30),
   birthday date,
   sex char(1),
   constraints pk_teacher_id primary key(teacher_id)
);
insert into teacher(teacher_id, name, birthday, sex) values ('2', '李艳',
                    to_date('1971-01-09', 'yyyy-mm-dd'), 'M');
insert into teacher(teacher_id, name, birthday, sex) values ('3', '熊松涛',
                    to_date('1976-04-02', 'yyyy-mm-dd'), 'M');

 --student_id和teacher_id都是主键,具有唯一性约束

update (select s.name as s_name,
               t.name as t_name from student s, teacher t 
                               where s.student_id =  t.teacher_id)--因为student_id和teacher_id是主键,所以可以直接implict update
         set s_name = t_name

 

--假如student_id和teacher_id其中有一个不是主键或2个都不是主键(没有唯一性约束)时,使用implict udpate 会报如下错误:

   cannot modify a column which maps to a non key-preserved table

解决:我们可以使用hints:/*+BYPASS_UJVC*/屏幕掉唯一性检查,屏幕唯一性检查效率会提高。

update  (select /*+ BYPASS_UJVC */ --屏蔽掉对student_id与teacher_id唯一性检查
                s.name as s_name, 
                t.name as t_name from student s, teacher t
                                where s.student_id =  t.teacher_id)
         set s_name = t_name

 

CPSS_DXCH_PACKET_ANALYZER_FIELD_LOCAL_DEV_SRC_IS_TRUNK_E, /** local dev src port */ CPSS_DXCH_PACKET_ANALYZER_FIELD_LOCAL_DEV_SRC_PORT_E, /** local dev src trunk id */ CPSS_DXCH_PACKET_ANALYZER_FIELD_LOCAL_DEV_SRC_TRUNK_ID_E, /** local dev src eport */ CPSS_DXCH_PACKET_ANALYZER_FIELD_LOCAL_DEV_SRC_EPORT_E, /** local dev trg phy port */ CPSS_DXCH_PACKET_ANALYZER_FIELD_LOCAL_DEV_TRG_PHY_PORT_E, /** Orig Is Trunk */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_IS_TRUNK_E, /** Orig Src_Dev */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_SRC_DEV_E, /** Orig Src Phy Is Trunk */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_SRC_PHY_IS_TRUNK_E, /** Orig Src Phy Port or Trunk ID */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_SRC_PHY_PORT_OR_TRUNK_ID_E, /** Orig Src Trunk ID */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_SRC_TRUNK_ID_E, /** trg eport */ CPSS_DXCH_PACKET_ANALYZER_FIELD_TRG_EPORT_E, /** trg phy port */ CPSS_DXCH_PACKET_ANALYZER_FIELD_TRG_PHY_PORT_E, /**@brief L2 */ /** mac sa */ CPSS_DXCH_PACKET_ANALYZER_FIELD_MAC_SA_E, /** mac da */ CPSS_DXCH_PACKET_ANALYZER_FIELD_MAC_DA_E, /** orig vid */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ORIG_VID_E, /** evidx */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EVIDX_E, /** evlan */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EVLAN_E, /** ether type */ CPSS_DXCH_PACKET_ANALYZER_FIELD_ETHER_TYPE_E, /**@brief L3 */ /** ipv4_sip */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPV4_SIP_E, /** ipv4 dip */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPV4_DIP_E, /** ipv6 sip */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPV6_SIP_E, /** ipv6 dip */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPV6_DIP_E, /** ipx protocol */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPX_PROTOCOL_E, /** dscp */ CPSS_DXCH_PACKET_ANALYZER_FIELD_DSCP_E, /**@brief MetaData */ /** Byte Count */ CPSS_DXCH_PACKET_ANALYZER_FIELD_BYTE_COUNT_E, /** is ip */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IS_IP_E, /** is ipv4 */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IS_IPV4_E, /** is ipv6 */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IS_IPV6_E, /** ip legal */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IP_LEGAL_E, /** ipm */ CPSS_DXCH_PACKET_ANALYZER_FIELD_IPM_E, /** l4 valid */ CPSS_DXCH_PACKET_ANALYZER_FIELD_L4_VALID_E, /** mac to me */ CPSS_DXCH_PACKET_ANALYZER_FIELD_MAC_TO_ME_E, /** packet cmd */ CPSS_DXCH_PACKET_ANALYZER_FIELD_PACKET_CMD_E, /** Queue Port */ CPSS_DXCH_PACKET_ANALYZER_FIELD_QUEUE_PORT_E, /** Queue Priority */ CPSS_DXCH_PACKET_ANALYZER_FIELD_QUEUE_PRIORITY_E, /** use vidx */ CPSS_DXCH_PACKET_ANALYZER_FIELD_USE_VIDX_E, /** egress filter drop */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_FILTER_DROP_E, /** egress filter en */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_FILTER_EN_E, /** egress filter registered */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_FILTER_REGISTERED_E, /** cpu code */ CPSS_DXCH_PACKET_ANALYZER_FIELD_CPU_CODE_E, /** marvell tagged */ CPSS_DXCH_PACKET_ANALYZER_FIELD_MARVELL_TAGGED_E, /** marvell tagged extended */ CPSS_DXCH_PACKET_ANALYZER_FIELD_MARVELL_TAGGED_EXTENDED_E, /** bypass bridge */ CPSS_DXCH_PACKET_ANALYZER_FIELD_BYPASS_BRIDGE_E, /** bypass ingress pipe */ CPSS_DXCH_PACKET_ANALYZER_FIELD_BYPASS_INGRESS_PIPE_E, /** tunnel start */ CPSS_DXCH_PACKET_ANALYZER_FIELD_TUNNEL_START_E, /** tunnel terminated */ CPSS_DXCH_PACKET_ANALYZER_FIELD_TUNNEL_TERMINATED_E, /** egress packet cmd */ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_PACKET_CMD_E, /** packet_trace **/ CPSS_DXCH_PACKET_ANALYZER_FIELD_PACKET_TRACE_E, /** outgoing_mtag_cmd **/ CPSS_DXCH_PACKET_ANALYZER_FIELD_OUTGOING_MTAG_CMD_E, /** queue_offset **/ CPSS_DXCH_PACKET_ANALYZER_FIELD_QUEUE_OFFSET_E, /** egress_mac_da **/ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_MAC_DA_E, /** egress_mac_sa **/ CPSS_DXCH_PACKET_ANALYZER_FIELD_EGRESS_MAC_SA_E,帮我把上面这个枚举转化为字符串数组,枚举号对应数组下标
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值