爱问知识人 爱问教育 医院库

oracle自定义函数的执行时间是什么呢?

首页

oracle自定义函数的执行时间是什么呢?

oracle自定义函数的执行时间是什么呢?

提交回答

全部答案

    2017-07-27 16:11:51
  •   oracle中的pl/sql代码会涉及到两个执行引擎,一个专门处理标准的SQL语句,另外一个处理pl/sql的过程代码,一般在引擎切换上会带来cpu额外的开销。比如foreach循环语句和普通for循环的区别,就是foreach消除了引擎切换,一直驻留在执行标准SQL的引擎中,从而缩短了执行时间。
       现在有一个客户信息表tacustomer, 包含了birthday, certificatetype, certificateno等字段,现在想要获知客户的生日信息。由于客户注册时生日等字段是可选择填写项,故大多数为空,所以要从证件号码certificateno中提取,certificatetype为证件类型,除身份证之外还有军官证、士兵证、户口本等枚举值,输入的值也不可靠,本来'0'代表身份证,但由于录入错误,使得非'0'值可能也指身份证,而'0'也可能输入的不是身份证。
      结合这些考虑因素,写了一个函数,输入参数为上述三个字段,输出为生日的年份。写了两个版本,在笔者的windows2003数据库服务器上(Intel(R) Xeon(R) CPU 5140 @ 2。33GHZ,4cpu,4。00GB内存),执行语句如下(tacustomer行数为200百万左右):-- 测试简单字符串连接的执行时间SELECT COUNT(t。
      certificatetype || t。certificateno || t。birthday)FROM tacustomer tWHERE 1 = 1AND ROWNUM 可以看出基本是3倍的关系(将上面的条件改为ROWNUM 附两个版本的代码:--版本1create or replace FUNCTION f_extract_birthday(id in VARCHAR, birthday in VARCHAR)RETURN VARCHARIS i integer; --id VARCHAR(18); --birthday VARCHAR (8); yyyy VARCHAR (4); len SMALLINT; trans BOOLEAN; c SMALLINT; ret VARCHAR (4); val NUMERIC(18, 0);BEGIN i := 1; --id := '430302810315405'; --id := '43030219810315405X'; --birthday := '19790315'; trans := FALSE; len := length(id); --val := CAST(id AS NUMERIC); --dbms_output。
      put_line(val);if (len = 15) then。

    C***

    2017-07-27 16:11:51

  • 系统软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):