"WHERE SUBSTR(AA, 1, vLength) = vAA"
vLength,vAA是变量对上面这句SQL进行数据绑定的操作,替换成"WHERE SUBSTR(AA, 1, ?) = ?"
对这句SQL等号左边的变量进行数据绑定,会有效果么?

解决方案 »

  1.   

    java还是pl sql在pl sql是有效的,不过要换一种写法:execute immediate '...WHERE SUBSTR(AA,1,:1) = :2' using vLength,vAA;
      

  2.   

    在会自动绑定的,你执行完成后,到 v$sql里面查找一下就知道了:select sql_text from v$sql where sql_text like '你的语句的前50个字符%';看看结果,这两个变量的地方是不是变成 :b :a之类的东东了,如果是这样,那就说明是绑定了另外,2楼说的不正确,不用加 execute immediate之类的东西,这样只是软解析而已
      

  3.   


    vLength可以绑定,但我想知道的是,对vLength的绑定会提高数据库查询效率么?是不是
    绑定了之后就是你所说的软解析了?
      

  4.   

    在sqlplus里的绑定,是连软解析都不走了,是不走解析了绑定这个事情说来话长,一般来说,事务性系统都应该绑定的,仓库型系统不用。变量绑定主要不是为了提高单个语句的速度,而是对整个系统而言,吞吐量会提高很多,而且就不会出现什么内存分配差16个字节这种事情了
      

  5.   

    我用你说的方法查询了一下:为什么生成的sql语句"SELECT AA,:V001 WHERE SUBSTR(AA, 1, :V002) = :V003"
    在v$sql视图中有两条?一模一样的。。