绑定变量的使用

浏览:
字体:
发布时间:2013-12-20 16:18:36
来源:

不使用绑定变量:

scott@ORCL>selectename from emp where empno=7788;

ENAME

----------

SCOTT

scott@ORCL>selectename from emp where empno=7369;

ENAME

----------

SMITH

sys@ORCL>selectsql_text,loads,sql_id from v$sqlarea where sql_text like 'select ename from empwhere empno=%';

SQL_TEXT LOADS SQL_ID

-------------------------------------------------------------------------------------------------------------------

selectename from emp where empno=7369 1 4s63dmxqzc2hg

selectename from emp where empno=7788 1 4b84jg8yc5nwa

使用绑定变量:

scott@ORCL>variablezbcxy number;

scott@ORCL>exec:zbcxy:=7788;

PL/SQL过程已成功完成。

scott@ORCL>selectename from emp where empno=:zbcxy;

ENAME

----------

SCOTT

scott@ORCL>exec:zbcxy:=7369;

PL/SQL过程已成功完成。

scott@ORCL>selectename from emp where empno=:zbcxy;

ENAME

----------

SMITH

sys@ORCL>select sql_text,loads,sql_id from v$sqlarea where sql_text like'select ename from emp where empno=%';

SQL_TEXT LOADS SQL_ID

----------------------------------------------------------------------------------------------------------------

selectename from emp where empno=:zbcxy 1 8y38u6k926y6h

在pl/sql中自动使用绑定变量(有些情况例外):


情况一:

scott@ORCL>createor replace procedure p_1(empno in number)

2 is

3 sql_text varchar2(100);

4 begin

5 sql_text:='select ename from emp whereempno='||empno;

6 execute immediate sql_text;

7 end;

8 /

过程已创建。

scott@ORCL>execp_1(7788);

PL/SQL过程已成功完成。

scott@ORCL>execp_1(7369);

PL/SQL过程已成功完成。

sys@ORCL>selectsql_text,loads,sql_id from v$sqlarea where sql_text like 'select ename from empwhere empno=%';

SQL_TEXT LOADS SQL_ID

---------------------------------------------------------------------------------------------------------------------

selectename from emp where empno=7369 1 4s63dmxqzc2hg

selectename from emp where empno=7788 1 4b84jg8yc5nwa

拼串的方式不走绑定变量

情况二:

scott@ORCL>createor replace procedure p_2(empno in number)

2 is

3 sql_text varchar2(100);

4 begin

5 sql_text:='select sal from emp where empno=:1';

6 execute immediate sql_text using empno;

7 end;

8 /

过程已创建。

scott@ORCL>execp_2(7788);

PL/SQL过程已成功完成。

scott@ORCL>execp_2(7369);

PL/SQL过程已成功完成。

sys@ORCL>selectsql_text,loads,sql_id from v$sqlarea where sql_text like 'select sal from empwhere empno=%';

SQL_TEXT LOADS SQL_ID

---------------------------------------------------------------------------------------------------------------

selectsal from emp where empno=:1 1 a29ya1gs6s7xq 

情况三:

scott@ORCL>createor replace procedure p_3(enum in number)

2 is

3 v_deptno varchar2(30);

4 begin

5 select deptno||'is 2033' into v_deptno from emp where empno=enum;

6 dbms_output.put_line(v_deptno);

7 end;

8

9 /

过程已创建。

scott@ORCL>execp_3(7788);

20is2033 

PL/SQL过程已成功完成。 

scott@ORCL>execp_3(7369);

20is2033 

PL/SQL过程已成功完成。 

scott@ORCL>execp_3(7499);

30is2033 

PL/SQL过程已成功完成。 

sys@ORCL>selectsql_text,loads,sql_id from v$sqlarea where sql_text like '%2033%'; 

SQL_TEXT LOADS SQL_ID

---------------------------------------------------------------------------------------------------------------------------------

selectsql_text,loads,sql_id from v$sqlarea where sql_text like '%2033%' 1 2p7hsnpb9hgmv

SELECTDEPTNO||'is 2033' FROM EMP WHERE EMPNO=:B1 1 2tzyfarcukgq7

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();