上QQ阅读APP看书,第一时间看更新
6.1 使用方法
我们可以在多种环境下使用绑定变量。
1.SQL
下面看看在SQL中如何使用绑定变量。
var v_empno number; //声明变量 exec :v_empno:=7369; //变量赋值 select * from emp where empno=:v_empno; //执行查询(引用变量)
2.PL/SQL:
下面看看在PL/SQL中如何使用绑定变量。
1)PL/SQL中静态SQL语句使用绑定变量:
declare vc_name varchar2(10); begin execute immediate 'select ename from emp where empno=:1' into vc_name using 7369; dbms_output.put_line(vc_name);
2)PL/SQL中动态SQL语句使用绑定变量:
declare vc_column varchar2(10); vc_sql varchar2(4000); n_temp number; vc_ename varchar2(10); begin vc_column:='empno'; vc_sql:='delete from emp where '||vc_column||'=:1 returning enameinto :2'; execute immediate vc_sql using 7369 returning into vc_ename; dbms_output.put_line(vc_ename);
3)PL/SQL中通过批量绑定使用绑定变量:
declare cur_empsys_refcursor; vc_sql_varchar2(4000); type namelist is table of varchar2(10); enames namelist; CN_BATCH_SIZE constant pls_integer:=1000; begin vc_sql:='select ename from emp where emp>:1'; open cur_emp for vc_sql using 7900; loop fet chcur_emp bulk collect into enames limit CN_BATCH_SIZE; for i in 1..enames.count loop dbms_output.put_line(enames(i)); end loo; exit when enames.count<CN_BATCH_SIZE; end loop; closecur_emp;
3.Java
下面看看在Java中怎样使用绑定变量。
1)Java中调用静态SQL使用绑定变量:
String query="select empno,ename from emp where empno=7369"; pstmt=connect.prepareStatement(query); res=pstmt.executeQuery(); String query="select empno,ename from emp where empno=?"; pstmt=connect.prepareStatement(query); pstmt.setIne(1,7369); res=pstmt.executeQuery();
2)Java中通过批量绑定使用绑定变量:
String dml="update emp set sal=? whereempno=?"; pstmt=connection.prepareStatement(dml); pstmt.clearBatch(); for (int i=0;i<UPDATE_COUNT;++i) { pstmt.setInt(1,generateEmpno(i)); pstmt.setIne(2,generateSal(i)); pstmt.addBatch(); } pstmt.executeBatch(); connection.commit(); //这段代码使用的是批量绑定的方式
因为引入了绑定变量,对于SQL解析而言会带来一些变化。下面通过带有绑定变量的SQL解析问题加以说明。