绑定变量的变迁和使用
像 select * from test where ch1=1; ----1 是常量
无论是 存储过程(PL/SQL)还是 一般的 语句
在 9i 中,都会变成 select * from test where ch1='SYS_...' --系统自动生成一个变量
但是在10g 中,还是保持原来的语句
好了,现在说说绑定变量
在 普通的sql语句或者动态的sql 语句(存储过程中定义)中,要显示指定使用绑定变了,否则,会变成 常量
Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec :x := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;
在过程中 的 动态sql语句中
FOR i IN 1 .. 10 LOOP
OPEN l_rc FOR 'select object_name from test_b where object_id = :x' USING i;
FETCH l_rc INTO l_dummy;
CLOSE l_rc;
END LOOP;
如果单单是这么定义:
FOR i IN 1..10 LOOP
OPEN l_rc FOR 'select object_name from test_b where object_id = '||i;
FETCH l_rc INTO l_dummy;
CLOSE l_rc;
END LOOP;
那么就不会使用到绑定变量,所以这也是要注意的地方
还有,在非 动态sql 的pl/sql 块中,一般的引用变量就可以使用到绑定变量,所以我们也不必去专门做转化
FOR i IN 1 .. 10 LOOP
INSERT INTO test_a VALUES(i);
END LOOP;
FOR i IN 1 .. 10 LOOP
INSERT INTO test_a SELECT i FROM dual;
END LOOP;
像上面的 在过程中定义的语句,都可以使用到绑定变量;
另外,绑定变量,在 视图中会变成 INSERT INTO TEST_A SELECT :B1 FROM DUAL 这种形式,所以,基本上,只要在视图中一看到 有使用到 :B1 这种类型的东西,基本上可以认定为使用了绑定变量
再有,在我的机器里面,trace文件中看到的语句都会变成 大写(即使原语句都是小写),但是其他的机子还没发现这种情况,不知道为什么
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14730395/viewspace-630697/
,如需转载,请注明出处,否则将追究法律责任。