【中华硕博网-全球500所高校指定报名中心】
【在职研究生】 【在职博士】 【MBA/EMBA】
  您现在的位置: 中华硕博网 > IT培训 > oracl > 考试认证 > 文章正文
站内搜索:

ORACLE技术专家问答(下)

作者:硕博网    文章来源:中华硕博网    点击数:    更新时间:2008-5-3
中华硕博网(http://www.china-b.com)全球500所高校指定报名中心--ORACLE技术专家问答(下)

  三问:DBMS_RANDOM
  您能否告诉我写一个能产生大于0小于1的随机数的随机数产生器的最好方法?
  
  答:Oracle8 8.0版介绍了DBMS_RANDOM包,Oracle8i 8.1.6版介绍了DBMS_RANDOM包的新功能,但Oracle8i 文档中没有详细全面介绍其功能。幸运的是:有一个新的DBMS_RANDOM包函数能够返回0-1之间的随机数。这个新函数是:
   
  VALUE函数的第一种形式返回一个大于或等于0且小于1的随机数;第二种形式返回一个大于或等于LOW,小于HIGH的随机数。下面是其用法的一个示例:
   
  NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。事实上,这就是你在清单1中所看到的。
  最后,是STRING函数。它返回一个长度达60个字符的随机字符串。参数OPT可以是清单2显示的值中的任何一个单个字符。
  关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:
   
  四问:连接次序与谓词求值
  在下面的查询中,WHERE 语句的哪一部分先执行?
   
  答:执行次序随已有的索引、统计、和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”不是数字。
   

[1] [2] 下一页

 相关热词搜索
>>更多
  • 此栏目下没有文章