oracle中的存储过程,有啥作用,以及怎么在代码中使用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中的存储过程,有啥作用,以及怎么在代码中使用?相关的知识,希望对你有一定的参考价值。

详细点,谢谢

定义:存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句
集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数
(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要
对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后
存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,
若干个有联系的过程可以组合在一起构成程序包。

优点:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
proc = connection.prepareCall(" call SIM_MEDICARE.P_Isinblacklist(?,?,?,?,?) ");
proc.setString(1, “”);设置传入参数
proc.registerOutParameter(4, Types.VARCHAR);注册传出参数
proc.execute();执行过程
proc.getString(4)获取结果追问

使用它的时候就像使用数据库中的表那样吗?

使用它的时候就像使用数据库中的表那样吗?

追答

总体上是一样的,语法有点区别,稍微看下就能实现简单的表操作了

追问

谢谢啦 -。。-

参考技术A 存储过程是命名程序块,其实质是通过一系列的SQL语句,根据传入的参数,可以完成比单个SQL语句更复杂的功能。举个例子:想要向一张表中插入大量数据(5万),就可以通过写一个存储过程直接调用,方便很多,而且存储过程可保存。 参考技术B 储存过程是为了让你把东西保留 代码是为了链接 参考技术C

楼上也不知道从哪扒下来的,一看LZ就是初学,举点例子不行吗?

 

比如建立个测试表

create table test
(id int,
name varchar2(10),
counts int);
 
insert into test values (1,'张三',100);
insert into test values (2,'李四',200); 
commit;

 

现在给你出个题目是

查询所有人加在一起的counts是多少

 

创建存储过程

create or replace p_test --创建存储过程,
as
v_counts int;--定义变量
begin --开始
select sum(counts) into v_counts from test;--将得到的结果放到变量里
DBMS_OUTPUT.PUT_LINE(v_counts);--将结果打印输出
end;--结束

 

执行这种不带输入参数的

begin
 p_test;
end;

 

然后你检查下结果

再给你创建一个带输入参数的

题目是,查询id为1的人名是什么

create or replace p_test1
(v_id int)
as
v_name varchar2(10);
begin
select name into v_name from test where id=v_id;
DBMS_OUTPUT.PUT_LINE(v_name);
end;

 

执行时这样

begin
p_test1(1);
end;

 

第2个我没给你写注释,你看你自己应该能理解吧

 

 

补充一下,存储过程不一定只是执行查询,也可以做删除或者修改等sql语句,总体来说就是几个或N个sql语句的集合,来完成系统内某些特定的需求,这些需求可以是一个sql搞定的,也可以是多个sql组合的

追问

谢谢啊 你讲的很好啊,对了 顺便问问 在C#如何操作这个存储过程 ,像平时操作数据库表那样吗?

追答

你看看c#里怎么调用这句

begin

p_test1(1);

end;

本回答被提问者采纳

Oracle存储过程在SSRS查询设计器中不起作用

我在Oracle 11g中编写了一个存储过程。它有4个输入参数和60个输出参数。它成功执行并使用Oracle SQL开发人员工具中的GUI返回输出。

但是SSRS中的问题是我作为ODP.NET数据源与Oracle连接。测试连接在共享数据集属性中成功。

当我选择特定的存储过程并传递4个输入参数时,这些参数是VARCHAR2数据类型

它显示一个错误:

答案

调用该过程时,还必须使用输出参数。 PS:我不喜欢有60个输出参数的想法。我会使用记录或集合(或两者)。

以上是关于oracle中的存储过程,有啥作用,以及怎么在代码中使用?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库中,存储过程中 %rowtype 类型的用法有啥限制吗?

mysql 与oracle中的存储过程及函数有啥区别,尽可能详细哦

Oracle中的cluster是啥意思,它有啥作用?

ibatis 怎么返回oracle游标

oracle 在存储过程中动态的建一个临时表使用和在数据库里写死一个临时表使用两者有啥区别?

Oracle 中的SID是啥意思?有啥作用?