在使用implict update table 时,发现其中一个表一定要有唯一约束,否则会报错!但是oracle可以使用hints:/*+ BYPASS_UJVC*/ 屏蔽掉队唯一性的检查。具体测试过程如下:
SQL> CREATE TABLE test_a(
2 id NUMBER ,
3 score NUMBER );
Table created.
Elapsed: 00:00:00.10
SQL>
CREATE TABLE test_b(
2 id NUMBER);
Table created.
Elapsed: 00:00:00.01
SQL>
SQL> INSERT INTO test_a VALUES(1,100);
INSERT INTO test_a VALUES(2,200);
1 row created.
Elapsed: 00:00:00.01
SQL>
INSERT INTO test_a VALUES(3,300);
1 row created.
Elapsed: 00:00:00.00
SQL>
1 row created.
Elapsed: 00:00:00.00
SQL> INSERT INTO test_b VALUES(1);
1 row created.
Elapsed: 00:00:00.01
SQL> INSERT INTO test_b VALUES(2);
1 row created.
Elapsed: 00:00:00.00
SQL> INSERT INTO test_b VALUES(3);
1 row created.
Elapsed: 00:00:00.01
SQL> INSERT INTO test_b VALUES(4);
1 row created.
Elapsed: 00:00:00.01
SQL>
SQL> SELECT * FROM test_a ORDER BY 1;
SELECT * FROM test_b ORDER BY 1;
ID SCORE
---------- ----------
1 100
2 200
3 300
3 rows selected.
Elapsed: 00:00:00.01
SQL>
ID
----------
1
2
3
4
4 rows selected.
Elapsed: 00:00:00.01
现在更新a表的字段:(先不考虑SQL的功能,只是测试这种方法)
SQL> UPDATE (
2 SELECT a.id,a.score,b.id AS b_id
3 FROM test_a a,
4 test_b b
5 WHERE a.id=b.id
6 )
7 SET id=b_id;
SET id=b_id
*
ERROR at line 7:
ORA-01779: cannot modify a column which maps to a non key-preserved table
报错了,需要对b表加唯一索引。加入hints执行
SQL> UPDATE (
2 SELECT/*+ BYPASS_UJVC*/ a.id,a.score,b.id AS b_id
3 FROM test_a a,
4 test_b b
5 WHERE a.id=b.id
6 )
7 SET id=b_id;
3 rows updated.
Elapsed: 00:00:00.01
说明:oracle可以跳过检查唯一约束。
继续往b表添加一条记录,使b表的记录不唯一。
SQL> INSERT INTO test_b VALUES(3);
1 row created.
Elapsed: 00:00:00.00
SQL> COMMIT;
Commit complete.
Elapsed: 00:00:00.00
SQL> SELECT * FROM TEST_B ORDER BY 1;
ID
----------
1
2
3
3
4
5 rows selected.
Elapsed: 00:00:00.00
SQL> UPDATE (
2 SELECT/*+ BYPASS_UJVC*/ a.id,a.score,b.id AS b_id
3 FROM test_a a,
4 test_b b
5 WHERE a.id=b.id
6 )
7 SET id=b_id;
4 rows updated.
Elapsed: 00:00:00.01
SQL> SELECT * FROM TEST_A;
ID SCORE
---------- ----------
1 100
2 200
3 300
3 rows selected.
Elapsed: 00:00:00.00
总结:使用了该hints,oracle就完全放弃了检查唯一性。因此SQL可以执行通过。
但要注意,是否能达到我们希望的目的,例如:下面进行一个有意义的更新,将a表中只要id在b表中出现就更新score,将score加1.
执行SQL如下:
SQL> UPDATE (
2 SELECT/*+ BYPASS_UJVC*/ a.id,a.score,b.id AS b_id
3 FROM test_a a,
4 test_b b
5 WHERE a.id=b.id
6 )
7 SET score=score+1;
4 rows updated.
Elapsed: 00:00:00.00
SQL> SELECT * FROM TEST_A;
ID SCORE
---------- ----------
1 101
2 201
3 302
3 rows selected.
Elapsed: 00:00:00.01
发现对于id=3的记录多加了个1。因此并没有得到我们想要的结果。这种情况应该先对b表的id进行去重。然后再更新。(其实完全也可以换种写法,呵呵) ,在此就不写了
总结:虽然对于此种应用,oracle跳过了检查唯一性,但是我们要注意在具体使用时,是否真的就达到了我们的效果!
要巧用并且活用现在已经有的功能。
转载自:http://blog.csdn.net/ningjieshuijing/article/details/5850208
分享到:
相关推荐
//RCC_HSEConfig(RCC_HSE_Bypass); RCC_HSEConfig(RCC_HSE_ON);//亚明小板设置方法 (最常用的无源晶振设置方法) /* Wait till HSE is ready 等待 HSE 起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if ...
- **BYPASS_CLK1_EN/BYPASS_CLK1**:旁路时钟信号。 - **HW_FWDG_EN/AUTO_POLL_DIS/OVSTB/QOS_EN/QOS_FC_OFF/WD_CLR_EN**:各种控制信号,涉及硬件转发、自动轮询禁用、过载状态、服务质量等功能。 #### 六、结论 ...
Winlicense 机器码 算法 ,经典的 CPU_ID + BIOS_ID + HD_ID + MAC_ID+校验
Bypass_1.13.79.zip
21. **web_set_proxy**、**web_set_proxy_bypass** 和 **web_set_secure_proxy**: 配置代理服务器,控制Vuser如何通过代理访问网络资源。 22. **web_set_max_retries** 和 **web_set_timeout**: 设置操作的重试次数...
22. **web_set_proxy**、**web_set_proxy_bypass**、**web_set_proxy_bypass_local**、**web_set_secure_proxy**:管理Vuser的代理设置,控制如何通过或绕过代理服务器。 23. **web_set_max_retries** 和 **web_set...
21. **web_set_proxy**、**web_set_proxy_bypass** 和 **web_set_secure_proxy**:配置Vuser的代理设置,包括指定代理服务器、直接访问某些服务器以及设置安全代理。 22. **web_set_max_retries** 和 **web_set_...
外网软件 mtk线刷授权 mtk机型解锁 super解包等 自带图文翻译与操作动画 解密bbs.ydss.cn
22. **web_set_proxy**,**web_set_proxy_bypass**,**web_set_secure_proxy**:设置代理服务器的使用规则,包括直接访问某些服务器或绕过代理。 23. **web_set_max_retries** 和 **web_set_timeout**:控制请求的...
SELECT /*+BYPASS_UJVC*/ bl.material_id AS bl_material_id, ibdb.material_id AS ibdb_material_id FROM scm_barcode_location bl, scm_input_bill_detail_barcode ibdb WHERE bl.bar_code = ibdb.bar_code AND...
然而,直接使用Meterpreter payload通常会被杀毒软件检测到,因此需要采取免杀措施。 首先,我们需要了解Meterpreter payload的生成过程。在本例中,我们使用MSFvenom创建一个PHP的Meterpreter payload: ```bash ...
标题 "hikvision_CVE-2017-7921_auth_bypass_config_decryptor-main.zip" 指向的是一个与海康威视(Hikvision)设备相关的安全漏洞,具体是CVE-2017-7921认证绕过漏洞。这个压缩包可能包含一个工具或指南,用于解析...
【标题】"new.bypass_bypass_NEW_免杀_webshell_phpwebshell_" 指的是一种新型的Webshell,它带有“bypass”和“NEW”特性,表明这是一个旨在绕过安全检测,且是最新技术的PHP Webshell。Webshell通常被黑客用于远程...
17. **web_set_proxy_bypass**:指定URL列表,允许虚拟用户直接访问这些URL,而不是通过代理服务器。这有助于优化性能测试过程。 18. **web_set_proxy_bypass_local**:指定是否通过本地代理地址访问。这对于控制...
iCL0udin_iCloud_bypass_v1.0是一款专门针对苹果设备的iCloud激活解锁工具,主要用于解决iOS设备被iCloud ID锁定无法正常使用的问题。这个工具的版本为v1.0,暗示它可能是一个早期版本,可能存在一定的局限性和不...
iCloud Bypass,即iCloud解锁,是一个过程,通过技术手段绕过设备上的iCloud激活保护,让用户能够使用设备,但请注意,这种操作可能违反苹果的使用条款,并可能导致设备失去官方更新和支持。此外,非官方的解锁方法...
【MPL_bypass_HS】是关于网络协议与路由优化的一个技术主题,主要涉及到MPLS(多协议标签交换)技术的HS(Hot Standby)功能和一种可能的优化策略。MPLS是一种在IP网络中用于提高数据传输效率和网络性能的协议,它...
- **proxy_cache_bypass**: 控制是否绕过缓存,直接转发到后端。 6. **SSL/TLS 支持** - **ssl**: 开启 SSL 功能。 - **ssl_certificate** 和 **ssl_certificate_key**: 分别指定 SSL 证书和私钥文件路径。 - *...
标题中的"从ByteCTF到bypass_disable_function1"指的是在网络安全竞赛ByteCTF中涉及到的一个技术挑战,即如何绕过`disable_function`的安全限制。`disable_function`是PHP配置中的一个选项,用于禁用某些可能带来...
- **post/windows/manage/mssql_local_auth_bypass** - **功能**: 绕过本地认证机制,获取更高权限。 - **应用场景**: 在成功攻破SQL Server后,为进一步横向移动或提权做准备。 #### 四、实操步骤 1. **启动...