Oracle数据库采用严格匹配策略来实现SQL语句共享。为了实现共享,SQL语句必须完全相同,包括空格和换行。

以下三个条件必须满足才能共享SQL语句:

  1. 字符级比较: 当前执行的语句必须与共享池中的语句完全相同。例如,SELECT * FROM ATABLE; 与以下任何语句都不相同:

    • SELECT *from ATABLE
    • Select * From Atable;
  2. 相同的数据库对象: 两条SQL语句操作的数据库对象必须相同。

  3. 相同的绑定变量: 语句中必须使用相同命名的绑定变量。例如,以下第一组中的两个SQL语句相同,可以共享;而第二组中的两个语句不同,即使在运行时为不同的绑定变量赋予相同的值:

    • 第一组:
      • select pin, name from people where pin = :blk1.pin;
      • select pin, name from people where pin = :blk1.pin;
    • 第二组:
      • select pin, name from people where pin = :blk1.ot_jnd;
      • select pin, name from people where pin = :blk1.ov_jnd;