Oracle 绑定变量用法

        在oracle 中,对于一个sql语句,存在两种可选的解析过程, 一种是硬解析,一种是软解析.
        一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩资源,严重影响了系统的并发效率。当一个sql语句提交后,oracle会首先检查一下共享缓冲池里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。
         而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。


下面用个简单的存储过程例子演示下变量绑定的用法:

Create Table student (grade varchar2(5), num number(6), Name Varchar2(20), age Integer); 
Insert Into student Values('101', 100001, 'Jack', 20); 
Insert Into student Values('102', 100001, 'Mike', 21); 
Insert Into student Values('101', 100002, 'Merry', 19); 
Insert Into student Values('102', 100002, 'Tony', 20); 



  Procedure Test_Bind_Variable Is
    v_Name  Varchar2(20);
    v_Grade Number(6);
    v_Num   Number(6);
    v_Age   Integer;
    v_Sql   Varchar2(200);
  Begin
    For Cur_Name In (Select Name From Student) Loop
      v_Name := Cur_Name.Name;
      v_Sql  := 'select grade, num, age into :n, :y, :z from student where name = :m';
      Execute Immediate v_Sql
        Into v_Grade, v_Num, v_Age
        Using v_Name;
      Dbms_Output.Put_Line('grade=' || v_Grade || ', num=' || v_Num ||
                           ', name=' || v_Name || ', age=' || v_Age);
    End Loop;
  End Test_Bind_Variable;

测试结果为:
grade=101, num=100001, name=Jack, age=20
grade=102, num=100001, name=Mike, age=21
grade=101, num=100002, name=Merry, age=19
grade=102, num=100002, name=Tony, age=20

你可能感兴趣的:(oracle,sql,脚本)