日期:2014-05-17  浏览次数:20929 次

oracle using用法
动态SQl中用using传递参数 下边这种写法对吗?
execute immediate 'select * from 表 where 字段1 = :1 and 字段2 = :1'
        using '1';
还是说 必须写成:
execute immediate 'select * from 表 where 字段1 = :1 and 字段2 = :2'
        using '1','1'
我的动态SQL里边 很多地方都用到了同一个参数,用一次 就得在using后边加一个吗?
Oracle 动态SQL using

------解决方案--------------------
动态SQL语句中的占位符与USING子句中的绑定参数是位置关联的,而不是名称关联。所以,如果在SQL语句中同样的占位符出现两次或多次,那么,它的每次出现都必须与一个USING子句中的绑定参数相关联。
------解决方案--------------------
肯定要写成第二种了。如果你的参数是固定值,可以直接execute immediate 'select * from 表 where 字段1 = ''1'' and 字段2 = ''1'''

------解决方案--------------------
但是,动态PL/SQL块中只有唯一的占位符才与USING子句中的绑定参数按位置对应。所以,如果一个占位符在PL/SQL块中出现两次或多次,那么所有这样相同的占位符都只与USING语句中的一个绑定参数相对应。
------解决方案--------------------
必须要写第二种。。不然会报 不是所有变量都已绑定异常