绑定变量

今天看了郭大师的书,关于绑定变量的一个用法:

首先清空共享池

命令 ALTER   SYSTEM   FLUSH   SHARED_POOL

因为共享池是存放已经执行的SQL语句的地方,所以,当执行完上面一条语句之后,再次查询V$SQL时之前执行的语句都清空了;


创建过程

CREATE OR REPLACE PROCEDURE proc1
AS
BEGIN
FOR i IN 1..100000
LOOP
EXECUTE IMMEDIATE
'insert into m values(‘||i||')' ;
COMMIT;
END LOOP;
END;

执行84秒,然后到V$SQL里查看SQL_ID,PARSE_CALL和EXECUTIONS ,也就是语句的HASH值、解析和执行情况,发现有十万行不同的HASH值,解析了十万次,执行了十万次。

把过程中的红色部分修改为绑定变量

CREATE OR REPLACE PROCEDURE proc1
AS
BEGIN
FOR i IN 1..100000
LOOP
EXECUTE IMMEDIATE
'insert into m values(:x)' USING i;
COMMIT;
END LOOP;
END;

执行13秒,相应的只有一个HASH值,解析1次,执行十万次;

这些原理都知道,今天通过这个例子算是比较直观的了解了这种状况; 也了解了一下绑定变量的另一种用法;

你可能感兴趣的:(绑定变量)