在公司的应用程序中发现了一条语句频繁执行,效率很低,后来同事说是因为用的是常量而不是绑定变量造成的,想请问这两个之间的区别,最好给SQL举例说明一下,谢谢。

解决方案 »

  1.   


    ....
    for i in 1 .. 1000
    loop
    open l_rc for
      ‘select object_name
       from all_objects
       where object_id = :x’
            using i;
        fetch l_rc into l_dummy;
    close l_rc;
    end loop;
    ............以上循环中,select ...  部分只解析一次, 但是如果把where object_id = :x’换成
    where object_id = ’|| i  就要解析1000次. 当然是前者会比后者快. 
      

  2.   

    object_id = :x’using i; 用i去替换:x(绑定),这样oracle就不会对它进行硬解析.直接到share pool里pin.