oracle游标能存储多少数据,Oracle数据库之存储过程与游标

一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,来执行它。

在大型数据库中,存储过程和触发器具有重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。

存储过程的优点:

1、存储过程只在创造时进行编译,以后每次执行存储过程都不需要重新编译,一般的SQL语句执行一次就要编译一次,所以使用存储过程可以提高数据库执行速度。

2、当对数据库进行复杂操作时(比如对多个表进行CRUD时),可以将复杂的CRUD操作用存储过程封装起来与数据库提供的事务处理结合在一块使用。

3、存储过程可以重复使用,可以减少数据库开发人员的工作量。

4、存储过程安全性搞,可以设定只有某个用户才具有对指定存储过程的使用权。

Oracle的存储过程分为两种:系统存储过程和自定义存储过程。

系统存储过程:Oracle预先提供的一组完成特功能的存储过程,安装完Oracle 就有。

自定义存储过程:1

2

3

4

5

6

7

8

9

10

11

12

13Create [Or Replace] Procedure 过程名[参数[in/out/in out]]

AS/IS

说明部分

BEGIN

可执行部分

[EXCEPTION 错误处理部分]

END [过程名];

注:可选的replace:表示如果存储过程已经存在,则用新的存储过程覆盖掉原来的,常用语存储过程的重建。

参数部分:用于定义多个参数(如果没有参数,可以不写),参数有三种形式:IN,OUT,INT OUT。一般没有指定参数形式的话,默认为IN。

关键字AS也可以写成IS,后面跟存储过程的说明部分,也可以在这块定义存储过程的局部变量。删除存储过程: DROP PROCEDURE 存储过程名;1

2

3SELECT COUNT(*) INTO PRODUCT_SUM FROM product_table;

DBMS_OUTPUT.PUT_LINE('产品数量是:'||PRODUCT_SUM);END;无参的存储过程:1

2

3

4

5

6

7

8--创建一个打印HelloWorld的无参存储过程

create or replace procedure printHelloWorldas --说明部分begin

dbms_output.put_line('Hello World');

end

printHelloWorld;--无参数存储过程的调用

方法1、exec printHelloWorld();

方法2、begin printHelloWorld();

end;

二、游标(Cursor)

游标:一种PL/SQL控制结构,对SQL语句的处理进行显示控制,便于对表的行数据逐条进行处理。,游标只存留在内存中。一般使用方法是:声明游标—>打开游标—>取出结果—>关闭游标。

一般使用for循环来操作游标1

2

3

4

5

6

7

8

9

10--利用for循环创建操作游标DELCARE --声明游标

CURSOR testCursor IS SELECT * FROM product_table where id=1;

productInfo product_table%ROWTYPE;--ROWTYPE类型:表示一行的数据

count NUMBER;BEGIN --开始操作游标

FOR productInfo IN testCursor

LOOP

count:=testCursor%ROWCOUT;--ROWCOUNT 对游标所操作的行数进行记录

DBMS_OUTPUT.put_line(count||'产品编号:'||productInfo.id);

DBMS_OUTPUT.put_line(count||'产品名称:'||productInfo.name);

END LOOP;END;

游标的作用:

1、指定结果集中特定行的位置

2、根据当前的结果接位置检索一行或者连续的几行

3、在结果集的当前位置修改行中的数据

4、对其他用户所做的数据更改定义不同的敏感级别

5、根据编程的方式访问数据库

因为游标的效率比较差,如果游标操作的数据超过一万行,那么就要改写。显式游标:用户显式的声明的游标,也就是指定的结果集,当查询返回结果超过一行,就需要一个显式游标。

隐式游标:所有的CRUD记录为隐式游标,系统帮我们定义。%Found:用于校验游标是否成功。

%NotFound:最后一条记录是否提取,到了游标的尾部,没有记录了就返回true

%ISOpen:游标是否打开,打开为true

%RowCount:游标当前提取的行数。

三、创建函数

语法:1

2

3

4

5

6

7

8create [or replace] function 函数名(参数列表[in/out/in out])

--参数列表的类型:in:输入的参数,out:返回的参数,in out:即是输入参数也是返回参数

return datatype--返回值类型

as/is

说明部分

begin

--执行的SQL

end;1

2

3

4

5

6--创建一个计算产品平均价格的函数

create or replace function avg_function_product(product_sum_price in number(10,2),product_count in out number(10,2)) return number(10,2)as

product_price number(10,2);begin

product_price:=product_sum_weight/product_count;

return product_price;

end;1

2

3

4

5

6

7--创建一个比较大小的自定义函数

create or replace function testCompare(args1 in number,args2 in number)return numberasbegin

if args1>args2 then return args1;

else return args2;

end if;

end testCompare;--测试调用

select testCompare(12,57) from product_table;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值