ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 绑定变量的使用

绑定变量的使用

原创 Linux操作系统 作者:txt1124 时间:2010-03-29 17:29:26 0 删除 编辑
绑定变量的变迁和使用

像 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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-12-15

  • 博文量
    91
  • 访问量
    162487