oracle绑定变量的使用
Oracle里的绑定变量
使用绑定变量,是可以重用解析树和执行计划基础条件.
绑定变量的语法:
--sql var x number; exec :x := 7369; select ename from emp where empno= :x; --plsql declare vc_name varchar2(10); begin execute immediate 'select ename from emp where empno= :1' into vc_name using 7788; dbms_output.put_line(vc_name); end; / --execute immediate [带绑定变量的sql] using [对应绑定变量的具体输入值]
插入语句的使用
declare vc_sql_1 varchar2(4000); vc_sql_2 varchar2(4000); n_temp_1 number; n_temp_2 number; begin vc_sql_1 := 'insert into sap(num_1,num_2) values(:1,:2)'; execute immediate vc_sql_1 using 7370,7788; n_temp_1 := sql%rowcount; vc_sql_2 := 'insert into sap(num_1,num_2) values(:1,:1)'; execute immediate vc_sql_2 using 7371,7799; n_temp_2 := sql%rowcount; dbms_output.put_line(to_char(n_temp_1+n_temp_2)); commit; end;--using 根据位置传入相关变量参数值
--动态sql可以使用绑定变量,returning 可以和带绑定变量的目标sql连用,目的把受该sql影响的行记录的对应字段值给取出来. --eg declare vc_column varchar2(10); vc_sql varchar2(4000); n_temp number; vc_name varchar2(10); begin vc_column := 'empno'; vc_sql :='delete from emp where ' || vc_column || ' = :1 returning ename into :2'; execute immediate vc_sql using 7369 returning into vc_name; dbms_output.put_line(vc_ename); commit; end;
PL/SQL中批量绑定的典型用法
主要优势,一次处理一批数据。
可以见到地将PL/SQL引擎看做专门用来处理PL/SQL代码块中除了sql之外的所有部分(eg:变量、复制、循环等)子系统,SQL引擎用来处理sql语句的子系统。 这里的PL/SQL引擎和SQL引起上下文切换就是指他们之间的交互。
--减少交互,提高性能 fetch cursorname bulk collect into [自定义的属组] <limit CN_BATCH_SIZE>
--eg "forall" 表示一次执行一批sql declare cur_emp sys_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 empno > :1'; open cur_emp for vc_sql using 7900; loop fetch cur_emp bulk collect into enames limit CN_BATCH_SIZE; for i in 1..enames.count loop dbms_output.put_line(enames(i)); end loop; exit when enames.count < CN_BATCH_SIZE; end loop; close cur_emp; end;