考试网 >> IT认证 >> Oracle >> Oracle指导 >> Oracle数据库常见问题答疑

Oracle数据库常见问题答疑

发布时间:2006-06-28 10:07     点击:
分页:上一页  1 2 3 4 5 6 [7] 8  下一页

and type = 'PACKAGE' order by line;

问:连接次序与谓词求值

在下面的查询中,WHERE 语句的哪一部分先执行?

Select field names from emp, dept

where emp.dept_num = dept.num and

emp.name Like 'S%' and dept.name='IT';

答:执行次序随已有的索引、统计、和session/init.ora参数的不同而变化。

学生大博客站 假定已有一个建立在DEPT(name)和EMP(dept_num)上的索引。假定优化器认为DEPT是唯一的,它可能按下面的顺序进行操作:

利用建立在DEPT(name)上的索引查找dept列

利用建立在EMP(dept_num)上的索引查找匹配的emp列(即连接emp.dept_num = dept.num)

依据建立在emp.ename like 'S%'进行过滤

现在,我们假定没有建立在EMP(dept_num)上的索引,也没有建立在DEPT(name)上的索引,而存在建立在EMP(name)和DEPT(num)上的索引。优化器可能按下面的次序进行操作:

利用建立在EMP(name)上的索引找到带有S的EMPS

利用建立在DEPT(num)上的索引找到匹配项

根据dept.name = 'IT'过滤结果

谓词求值的次序是不确定的,可以随时间的改变而改变,并由优化器决定。不要假定任何事情会按一定的次序发生。如果你那么做,随着时间的推移,你的应用程序可能会出现一些看起来非常奇怪的错误。看以下的例子:建立一个表,输入一些数据。当X='a’时,第二列的数据“Y”是一个数值,当X='b’时,“Y”不是数字。

SQL> create table t ( x varchar2(1), y varchar2(1) );

Table created.

SQL> insert into t values ( 'a', '1' );

1 row created.

SQL> insert into t values ( 'b', 'x' );

1 row created.

现在根据这个表运行一个查询:查找满足x='a',y=1的行。

SQL> select * from t where x = 'a' and

y = 1;

ERROR:

ORA-01722: invalid number
分页:上一页  1 2 3 4 5 6 [7] 8  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有