一道面试题:举例说明[存储过程],[视图]和[自定义函数]的应用场合

一道面试题:举例说明[存储过程],[视图]和[自定义函数]的应用场合.  
  1、需举例说明三种技术的应用场合,为什么选择这种而不是另外两种.  
  2、如果表结构发生了变化,以上三种是否都要重新编译。  

 

1,当需要用exec动态查询的时候,或者做某些处理的时候,另外两种是不能实现的,所以仅选择存储过程;  
  当查询的需求过于复杂经常用到的sql语句建立视图便于管理,重用,提高效率,并且没必要用到存储过程的,用视图;  
  自定义函数:例如我在一个语句里想查询出代码和代码含义,代码含义在别的表里面,虽然我可以做联合查询,但是多了的话会加大语句的复杂程度,不便于管理,所以用自定义函数,语句简化成从一个表里的查询,看着简单明了,模块化嘛;  
  2,当表结构变化了,当然要检查这3种东西!

 

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

 

From zjcxc(邹建)

 

1、需举例说明三种技术的应用场合,为什么选择这种而不是另外两种.  
   
  要根据实际情况,做适当的选择,所以不能定性那一种,也没有定性说一定在某场合使用某种技术  
  存储过程能用动态语句,能更新表,可以传递参数,可以是返回结果集,也可以是一个数据处理过程  
  视图能创建索引,但只限于用一个SQL语句能实现的东西,固定是返回结果集  
  函数可以返回表/值,但不能更新表,不用用动态SQL语句,但可以传递参数,调用也方便  
   
   
  2、如果表结构发生了变化,以上三种是否都要重新编译。  
  sp_refreshview   '视图名'  
  sp_recompile   '存储过程名/函数名'

 

 

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

 

我补充一点;(对于性能的)  
  1:[存储过程]:可以保留执行计划在过程高速缓存中,减少编译的时间。对于C/S结构要多用存储过程,只通过调用语句和参数调用存储过程直接在服务器上对数据进行操作,减少 网络 的代码传输量,提高系统的性能。  
  2:[视图]:对于复杂的连接查询和费时的用于生成报表的聚合查询可以通过索引视图来提高系统的性能。对于一般的视图而言在对视图进行查询时,都将在视图的内部进行查询操作,和直接的查询没有什么区别,只是在调用的时候方便。对于索引视图则将数据实际的存储在视图内,相当于一个表,这样避免了每次的视图内部连接操作,可以提高系统的性能。  
  3:[自定义函数]:自定义函数用于返回表的结果集,而不能对表进行更新操作,用自定义函数来返回查询数据的结果集的效率要比用存储过程返回查询的数据的结果集的效率要高的多。

 

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

 

同意楼上的,但:  
  用自定义函数来返回查询数据的结果集的效率要比用存储过程返回查询的数据的结果集的效率要高的多。  
   
  我不太清楚。我只知道自定义函数来返回查询数据的结果集可以在from后类似一个表使用,而存储过程的返回不能直接这么用,但还有效率高这么一说!  
  希望能详细说一下这一点!  
   
  我觉得这3个技术的目的有比较大的不同:  
  存储过程使用最灵活,可以通过复杂的逻辑来处理数据或返回数据集(我习惯把数据集写在表中)。  
  视图主要是为了编程规范、调用方便、便于维护,实际上就是代替复杂的SQL查询语句。楼上说的索引视图没有用过,但看效率可能还不如建一个固定的表。  
  函数的写法受和多限制,可以用来查数据库,就相当如一个子查询,我觉得用在批量数据的处理中虽然方便,但效率不太高。我用它多半是为了编程规范、调用方便、便于维护,主要处理一些规则,不含读取数据库的字段转换什么的。  
   
  个人用的一点心得!欢迎批评!

 

 

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

URL:http://topic.csdn.net/t/20041012/09/3446471.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
涉及到了基础SQL的所有知识点 desc emp;描述一下emp表的结构 2 select from salgrade; 3 select ename sal 12 from emp; 4 select 2 3 from emp;会出现14行 5 select 2 3 from dual;只有一行 专门提供计算数学表达式的 6 select sysdate from dual;获取当前系统时间 7 select ename sal 12 annual salary from emp;给sal 12取了个别名叫做annual salary 8 select ename sal 12 "annual salary" from emp;用双引号将别名括起来 这样可以保留住空格 大小写 中文等等 9 select ename comm from emp;其中comm中包括空值 空值不等于0 10 select ename sal 12+comm "总年薪" from emp;任何数加上空值都等于空值 11 select ename||sal from emp;字符串连接符 12 select ename||" nihao" from emp;在SQL语句中 字符串是由单引号括起来的若干字符 13 select ename||" niahao""dajiahao" from emp;如果字符串中本身就有一个单引号 那么在SQL语句中进行表示时 用两个单引号表示一个单引号 14 select distinct deptno from emp;select distinct deptno job from emp; 15 select from emp where ename "CLARK";where中添加条件约束 并且字符串需要加上单引号来表示 16 select ename job sal from emp where ename > "CBA";字符串比较 先比较第一个 比C大 就TRUE 第一个字母相同)否则比较下一个 比B大 就TRUE 否则 17 select ename sal from emp where sal<>ALL 1500 2000 2500 3000 ;<>表示不等于 <>ALL表示不等于所有的( ) 18 select from emp where sal between 800 and 1300;和select from emp where sal> 800 and sal< 1300;的效果是一样的 19 select from emp where comm is null;is null表示是空值 is not null表示非空值 不可以用 20 select ename sal from emp where ename in "SMITH" "CLARK" "SCOTT" ;ename在()中的人选出来 ()中也可以是其他类型 21 select ename sal hiredate from emp where hiredate > "20 2月 81";日期的格式 22 select ename sal from emp where ename like " A%"; 表示一个字符 %表示0个或多个字符 23 select from emp where ename like "% %%" escape " ";其中 作为转义字符的符号 select from emp where ename like "% %%"; %表示百分号 24 select empno ename from emp order by empno asc;升序排列(默认);select deptno dname from dept order by deptno desc;降序排列 25 select empno ename from emp where deptno<>10 order by empno desc;可以先选择在排序 26 select ename sal deptno from emp order by deptno asc ename desc;先按照deptno进行升序排列 在deptno相同的地方 按照ename进行降序排列 27 select ename sal 12 annual sal from emp where ename not like " A%’ and sal > 800 order by desc; 28 select ename sal from emp where lower ename like " a%";小写 29 select substr ename 2 3 from emp;从第二个字符开始 截3个字符出来作为结果 30 select chr 65 from dual;把ASCII码转化成字符 31 select ascii "A" from dual;把字符转化成ASCII码 32 select round 23 643 2 from dual;四舍五入为23 64 默认第二个参数为0 即四舍五入到各位 也可以为 1 则为20 33 select to char sal "$99 999 9999" from emp;美元 9代表一个数字 “ ”代表一个千分位符号 select to char sal "L99 999 9999" from emp;人民币 select to char sal "L00000 0000" from emp; 34 select to char hiredate "YYYY MM DD HH:MI:SS" from emp;转换Date类型的时间表示方法 select to char sysdate "MM DD YY HH24:MI:SS" from dual;24小时制 35 select ename hiredate from emp where hiredate > to Date "1981 2 3 14:23:12" "YYYY MM DD HH24:MI:SS" ;to date "" "" 将日期转换成自己想要的格式 36 select ename sal 12 + nvl comm 0 from emp;nvl comm 0 是将comm中的空值设为0 非空值还是本身 37 to number "$1250 00" "$9 999 99" ;有点问题 ">涉及到了基础SQL的所有知识点 desc emp;描述一下emp表的结构 2 select from salgrade; 3 select ename sal 12 from emp; 4 select 2 3 from emp;会出现14行 5 select 2 3 from dual;只有一行 专门提供计算数学表达式的 6 select sysdate from dual;获 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值