使用绑定变量和不使用绑定变量操作数据库

以下例子是在delphi中编程实现,数据库为oracle,具体的代码省略了,只说明情况。

1、不使用绑定变量

例子:删除同一张表的两条记录。

sql语句如下:

(1)delete from t_englishscore_score where STUDENTNUM=’200431500123′

and LESSONNAME=’test’ and YEAR=’2005′ and TERM=’上’;

(2)delete from t_englishscore_score where STUDENTNUM=’200431500123′

and LESSONNAME=’毕业设计’ and YEAR=’2007′ and TERM=’下’

此时查询v$sqltext视图(它能够反映oracle 中share pool中的sql解析共享情况):

ADDRESS

HASH_VALUE

SQL_ID

COMMAND_TYPE

PIECE

SQL_TEXT

0000000173D47990

2193311325

1mhba361bqjkx

7

0

delete from t_englishscore_score where STUDENTNUM=’200431500123′

0000000173D47990

2193311325

1mhba361bqjkx

7

1

and LESSONNAME=’test’ and YEAR=’2005′ and TERM=’上’

0000000188BDAC00

321412224

3jjk8tn9khr40

7

0

delete from t_englishscore_score where STUDENTNUM=’200431500123′

0000000188BDAC00

321412224

3jjk8tn9khr40

7

1

and LESSONNAME=’毕业设计’ and YEAR=’2007′ and TERM=’下’

可见,没有使用绑定变量,两次删除的语句都分别对应不同的Hash_Value,在共享池中占据两个条目,而且关键是这两个条目能够被以后删除记录操作共享的几率大致趋于0,除非有同样的记录需要删除,这样就大大降低了共享池“共享”的功能。

2、使用绑定变量

例子:更新同一张表多条记录。

sql语句:在delphi中sql语句代码如下:

(1)update t_englishscore_score set LESSONNUM=:newLessonnum,LESSONNAME=:newLessonname,

YEAR=:newYear,TERM=:newTerm,COURSESORT=:newCourseSort,

CREDIT=:newCredit,SCORE=:newScore,ISDELETE=:newIsDelete

where STUDENTNUM=:oldStudentnum and LESSONNAME=:oldLessonname

and YEAR=:oldYear and TERM=:oldTerm

每次更新,只要赋予相应的参数即可。多次更新后,查看v$sqltext:

ADDRESS

HASH_VALUE

SQL_ID

COMMAND_TYPE

PIECE

SQL_TEXT

00000001735AF2B0

1453164333

gfdbw8db9v1td

6

0

update t_englishscore_score set LESSONNUM=:1,LESSONNAME=:2,YEAR=

00000001735AF2B0

1453164333

gfdbw8db9v1td

6

1

:3,TERM=:4,COURSESORT=:5,CREDIT=:6,SCORE=:7,ISDELETE=:8  where S

00000001735AF2B0

1453164333

gfdbw8db9v1td

6

2

TUDENTNUM=:9 and LESSONNAME=:10 and YEAR=:11 and TERM=:12

可见使用绑定变量后,多次更新操作,都很好的共享了一条sql解析,大大降低了硬解析的数量,相应的提供了软解析的数量,从而真正发挥了共享池“共享”的作用。

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>