数据库高效优化:架构、规范与SQL技巧
上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解析问题加以说明。