`

/*+ BYPASS_UJVC*/ 的使用技巧

 
阅读更多

在使用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

分享到:
评论

相关推荐

    STM32-16-CAN-正常模式YMXB-0402.rar

    //RCC_HSEConfig(RCC_HSE_Bypass); RCC_HSEConfig(RCC_HSE_ON);//亚明小板设置方法 (最常用的无源晶振设置方法) /* Wait till HSE is ready 等待 HSE 起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if ...

    BCM5396 评估板原理图

    - **BYPASS_CLK1_EN/BYPASS_CLK1**:旁路时钟信号。 - **HW_FWDG_EN/AUTO_POLL_DIS/OVSTB/QOS_EN/QOS_FC_OFF/WD_CLR_EN**:各种控制信号,涉及硬件转发、自动轮询禁用、过载状态、服务质量等功能。 #### 六、结论 ...

    Winlicense HWID 研究——合集_hwid_WinLicenseHWID_cpuid_机器码_WinLicense_

    Winlicense 机器码 算法 ,经典的 CPU_ID + BIOS_ID + HD_ID + MAC_ID+校验

    Bypass_1.13.79.zip

    Bypass_1.13.79.zip

    Loadrunner函数汇总

    21. **web_set_proxy**、**web_set_proxy_bypass** 和 **web_set_secure_proxy**: 配置代理服务器,控制Vuser如何通过代理访问网络资源。 22. **web_set_max_retries** 和 **web_set_timeout**: 设置操作的重试次数...

    loadrunnerWeb函数[归类].pdf

    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...

    loadrunnerWeb函数-4页.pdf

    21. **web_set_proxy**、**web_set_proxy_bypass** 和 **web_set_secure_proxy**:配置Vuser的代理设置,包括指定代理服务器、直接访问某些服务器以及设置安全代理。 22. **web_set_max_retries** 和 **web_set_...

    mtk机型修复nv 授权 解包MTK_Auth_Bypass_Tool_V25+24双版合一

    外网软件 mtk线刷授权 mtk机型解锁 super解包等 自带图文翻译与操作动画 解密bbs.ydss.cn

    loadrunnerWeb函数[收集].pdf

    22. **web_set_proxy**,**web_set_proxy_bypass**,**web_set_secure_proxy**:设置代理服务器的使用规则,包括直接访问某些服务器或绕过代理。 23. **web_set_max_retries** 和 **web_set_timeout**:控制请求的...

    Oracle批量更新方法.pdf

    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...

    bypass_360_meterpreter免杀技巧1

    然而,直接使用Meterpreter payload通常会被杀毒软件检测到,因此需要采取免杀措施。 首先,我们需要了解Meterpreter payload的生成过程。在本例中,我们使用MSFvenom创建一个PHP的Meterpreter payload: ```bash ...

    hikvision_CVE-2017-7921_auth_bypass_config_decryptor-main.zip

    标题 "hikvision_CVE-2017-7921_auth_bypass_config_decryptor-main.zip" 指向的是一个与海康威视(Hikvision)设备相关的安全漏洞,具体是CVE-2017-7921认证绕过漏洞。这个压缩包可能包含一个工具或指南,用于解析...

    new.bypass_bypass_NEW_免杀_webshell_phpwebshell_

    【标题】"new.bypass_bypass_NEW_免杀_webshell_phpwebshell_" 指的是一种新型的Webshell,它带有“bypass”和“NEW”特性,表明这是一个旨在绕过安全检测,且是最新技术的PHP Webshell。Webshell通常被黑客用于远程...

    loadrunner常用函数

    17. **web_set_proxy_bypass**:指定URL列表,允许虚拟用户直接访问这些URL,而不是通过代理服务器。这有助于优化性能测试过程。 18. **web_set_proxy_bypass_local**:指定是否通过本地代理地址访问。这对于控制...

    iCL0udin_icloud_bypass_v1.0

    iCL0udin_iCloud_bypass_v1.0是一款专门针对苹果设备的iCloud激活解锁工具,主要用于解决iOS设备被iCloud ID锁定无法正常使用的问题。这个工具的版本为v1.0,暗示它可能是一个早期版本,可能存在一定的局限性和不...

    Pro Bangla Bypass Tool_probangla_bypass_tool_icloud_Icloudbypass

    iCloud Bypass,即iCloud解锁,是一个过程,通过技术手段绕过设备上的iCloud激活保护,让用户能够使用设备,但请注意,这种操作可能违反苹果的使用条款,并可能导致设备失去官方更新和支持。此外,非官方的解锁方法...

    MPL_bypass_HS

    【MPL_bypass_HS】是关于网络协议与路由优化的一个技术主题,主要涉及到MPLS(多协议标签交换)技术的HS(Hot Standby)功能和一种可能的优化策略。MPLS是一种在IP网络中用于提高数据传输效率和网络性能的协议,它...

    nginx 参考手册

    - **proxy_cache_bypass**: 控制是否绕过缓存,直接转发到后端。 6. **SSL/TLS 支持** - **ssl**: 开启 SSL 功能。 - **ssl_certificate** 和 **ssl_certificate_key**: 分别指定 SSL 证书和私钥文件路径。 - *...

    从ByteCTF到bypass_disable_function1

    标题中的"从ByteCTF到bypass_disable_function1"指的是在网络安全竞赛ByteCTF中涉及到的一个技术挑战,即如何绕过`disable_function`的安全限制。`disable_function`是PHP配置中的一个选项,用于禁用某些可能带来...

    攻击Sql server 服务(第三十四课).docx

    - **post/windows/manage/mssql_local_auth_bypass** - **功能**: 绕过本地认证机制,获取更高权限。 - **应用场景**: 在成功攻破SQL Server后,为进一步横向移动或提权做准备。 #### 四、实操步骤 1. **启动...

Global site tag (gtag.js) - Google Analytics