+ -
当前位置:首页 → 问答吧 → 关于存储过程的问题

关于存储过程的问题

时间:2011-10-12

来源:互联网

本人刚刚学存储过程,不过上网看了很多例子,还不知其所以然,希望各位大师指点一下。

1、存储过程到底有什么用途呢?和自定义function有什么区别?

2、我见有些例子是create procedure XXX is......,有些是create procedure XXX as .......到底是as还是is?是否印刷问题,还是如何呢?

3、我在plsql里面拟写一个简单的存储过程,但却说什么处于无效状态,到底是什么回事?

create procedure aaa_test as
begin
  select xxx from yyy;
end  


call aaa_test;


还有就是为什么有些教程是call,有些是exec的?有些又在aaa_test()加个括号,

我觉得现在网上很多文章的说法都不一样,好像参差不齐,真的望有哪位高人可以指点一二了。万分感谢。

作者: kirasum   发布时间: 2011-10-12

call调用存储过程aaa_test;
exec 一般是动态执行存储过程。
aaa_test()加括号是为了,调用存储过程。

作者: lzd_83   发布时间: 2011-10-12

存储过程:
  应用程序中用sql语句,使用exec调用,单独做为一个语句。

函数:
  sql语句的一部分,不能用exec调用;
  临时表不能在函数中使用;
  部分内嵌函数不能在函数中使用;

作者: ch_fujun   发布时间: 2011-10-12

引用 1 楼 lzd_83 的回复:

call调用存储过程aaa_test;
exec 一般是动态执行存储过程。
aaa_test()加括号是为了,调用存储过程。


那如果按你所说,在plsql里面是用call还是用exec?到底要不要加括号?

作者: kirasum   发布时间: 2011-10-12

补充一下:

从参数的返回情况来看:
  如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;

从调用情况来看:
  如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,你可以参考《ORACLE 9I PL\SQL程序设计》(机械工业出版社);

如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。

作者: ch_fujun   发布时间: 2011-10-12

热门下载

更多