下面是判断SQL语句是否与共享内存中某一SQL相同的步骤: 1). 对所发出语句的文本串进行hashed。如果hash值与已在共享池中SQL语句的hash值相同,则进行第2步: 2) 将所发出语句的文本串(包括大小写、空白和注释)与在第1步中识别的所有 已存在的SQL语句相比较。 例如: SELECT * FROM emp WHERE empno = 1000; 和下列每一个都不同 SELECT * from emp WHERE empno = 1000; SELECT * FROM EMP WHERE empno = 1000; SELECT * FROM emp WHERE empno = 2000; 在上面的语句中列值都是直接SQL语句中的,今后我们将这类sql成为硬编码SQL或字面值SQL
使用绑定变量的SQL语句中必须使用相同的名字的绑定变量(bind variables) , 例如: a. 该2个sql语句被认为相同 select pin , name from people where pin = :blk1.pin; select pin , name from people where pin = :blk1.pin; b. 该2个sql语句被认为不相同 select pin , name from people where pin = :blk1.ot_ind; select pin , name from people where pin = :blk1.ov_ind; 今后我们将上面的这类语句称为绑定变量SQL。
3). 将所发出语句中涉及的对象与第2步中识别的已存在语句所涉及对象相比较。 例如: 如用户user1与用户user2下都有EMP表,则 用户user1发出的语句:SELECT * FROM EMP; 与 用户user2发出的语句:SELECT * FROM EMP; 被认为是不相同的语句, 因为两个语句中引用的EMP不是指同一个表。