ORACLE day06

目录:
游标的使用
带参游标
存储过程
参数的模式
指定实参的模式
缺省参数的模式
Sql的函数
1 游标的使用
1.1 问题
使用while 循环 结合 found 属性遍历游标。

1.2 步骤
代码如下所示

declare
    cursor empcursor is select * from s_emp;
    var_emp    empcursor%rowtype;
begin
    open   empcursor;
    fetch  empcursor into  var_emp;
    while  empcursor%found  loop
    dbms_output.put_line(var_emp.id||':'||
    var_emp.first_name||':'||var_emp.salary);
    fetch  empcursor into  var_emp;
    end  loop;
    close  empcursor;  
end;                   

首先在declare申明区,声明名为empcursor的游标,在声明一个变量来表示游标指针偏移量。

然后在begin执行区,使用open打开游标,使用fetch提取数据,然后使用while循环语句遍历游标 最后使用close关闭游标;

2 带参游标
2.1 问题
选择(除过for循环)任意循环遍历游标。

2.2 步骤
代码如下所示

 declare
    /*声明游标*/
    cursor  empcursor(var_id number)  
    is select * from s_emp where id>var_id;
    var_emp  empcursor%rowtype;
begin
    open   empcursor(15);
    loop
    fetch  empcursor into var_emp;
    exit  when empcursor%notfound;
    dbms_output.put_line(var_emp.id||':'||
    var_emp.first_name||':'||var_emp.salary);
    end loop;
    close  empcursor;
end;    

首先在declare申明区,声明名为empcursor的带参游标,并且在select查询语句中使用参数查询id大于参数的所有有数据。在声明一个变量来表示游标指针偏移量

然后在begin执行区,使用open 打开游标,并且传入参数15. 使用loop循环遍历游标,fetch获取数据,dbms_output.put_line输出打印数据中的id,first_name和 salary,没有发现数据的时候就退出循环。

最后使用使用close关闭游标

3 存储过程
3.1 问题
设计一个存储过程,传入两个整数参数,输出这两个参数的最大值。

3.2 步骤
代码如下所示

create  or replace procedure  getmax(var_x number,

var_y number)
is
begin
if var_x<var_y then
dbms_output.put_line(var_y);
else
dbms_output.put_line(var_x);
end if;
end;
设计一个名为getmax的存储过程。有两个number类型的参数。

在begin区使用if语句,判断var_x和var_y大小,打印输出最大的数。

4 参数的模式
4.1 问题
设计一个存储过程,设计三个整数参数,打印前两个参数的最大值,并且把前两个参数的和存入第三个参数中,调用这个存储过程验证功能。

4.2 步骤
存储过程 代码如下所示

create or replace procedure getMaxAndSum
(var_x in number,var_y number,var_z out number)
is
begin
if var_x<var_y then
dbms_output.put_line(var_y);
else
dbms_output.put_line(var_x);
end if;
var_z:=var_x+var_y;
end;
设计一个名为getMaxAndSum的存储过程。有三个number类型的参数。一个in模式,负责传入,一个默认的,一个out模式负责传入也负责传出。

在begin区让var_z等于var_x和var_y的和。使用if语句,判断var_x和var_y大小,打印输出最大的数。

调用存储过程 代码如下所示

declare
var_z number:=1;
begin
getMaxAndSum (1,9526,var_z);
dbms_output.put_line(var_z);
end;
在declare申明区,声明一个number的变量,并初始化为1。

在begin执行区调用getMaxAndSum存储过程,并传入1,9526和变量var_z。

使用dbms_output.put_line将var_z的值打印输出。

5 指定实参的模式
5.1 问题
设计一个存储过程,设计两个整数参数,打印这两个参数的最大值,并且把两个参数的和存入第二个参数中,调用这个存储过程验证功能 。

5.2 步骤
存储过程 代码如下所示

create or replace procedure getMaxAndSum(var_x in number,var_y in out number)
is
begin
var_y:=var_x+var_y;
if var_x<var_y then
dbms_output.put_line(var_y);
else
dbms_output.put_line(var_x);
end if;
end;
设计一个名为getMaxAndSum的存储过程。有两个number类型的参数。一个in模式,负责传入,一个是in out模式负责传入也负责传出。

在begin区使用if语句,判断var_x和var_y大小,打印输出最大的数。让var_z等于var_x和var_y的和(这个必须在后面负责会改变var_y的值)。

调用存储过程 代码如下所示

declare
var_y number:=1;
begin
getMaxAndSum (var_y=>var_y,var_x=>9526);
dbms_output.put_line(var_y);
end;
在declare申明区,声明一个number的变量,并初始化为1。

在begin执行区调用getMaxAndSum存储过程,打乱传入顺序,需要先查看存储过程中的变量。让存储过程中的var_y等于调用过程var_y,让存过程中的var_x等于9526。

使用dbms_output.put_line将var_y的值打印输出。

6 缺省参数的模式
6.1 问题
设计一个存储过程,传入一个整数参数var_n代表从1加到得数。然后把前N项和存入第二个参数中。调用这个存储过程,验证功能。

1+2+3…+100

10----(55

100—(5050

6.2 步骤
代码如下所示

create or replace procedure getNumN(var_n in number,var_sum out number)
is
begin
var_sum:=0;
for var_i in 1…var_n loop
var_sum:=var_sum+var_i;
end loop;
end;
设计一个名为getNumN的存储过程。有两个number类型的参数。一个in模式,负责传入,一个是out模式负责传出。

在begin区,因为var_sum是out模式,所以需要将var_sum 赋初值。使用for循环语句,将1到var_n的所有书相加并赋值给var_sum。

调用存储过程 代码如下所示

declare
var_sum number:=0;
begin
getNumN(10,var_sum);
dbms_output.put_line(‘var_sum’||var_sum);
end;
在declare申明区,声明一个number的变量,并初始化为0。

在begin执行区调用getNumN存储过程,传入10和接受传出值的var_sum。

使用dbms_output.put_line将var_sum的值打印输出。

7 Sql的函数
7.1 问题
设计一个函数 传入两个整数参数 返回这两个整数参数的最大值 并且 把两个参数的和 存入第二个参数中 调用这个函数验证功能。

7.2 步骤
代码如下所示

create  or  replace  function  getMaxAndSum

(var_x in number,var_y in out number)return number
is
var_temp number;
begin
var_temp:=var_y;
var_y:=var_x+var_y;
if x<var_temp then
return var_temp;
else
return var_x;
end if;
end;
设计一个名为getMaxAndSum的函数。有两个number类型的参数。一个in模式,负责传入,一个是in out模式负责传入传出,返回一个number类型。声明一个number的变量var_temp.

在begin区,让var_temp等于var_y。var_y等于var_x加上var_Y。使用if语句判断var_x和temp的最大值。将最大值返回。

调用存储过程 代码如下所示

declare
var_y number:=123;
var_res number:=0;
begin
var_res:=getMaxAndSum(100,var_y);
dbms_output.put_line(var_res);
dbms_output.put_line(var_y);
end;
在declare申明区,声明两个number的变量,var_y和var_res。

在begin执行区调用getMaxAndSum函数,传入100和var_y,并用var_res接受getMaxAndSum函数的返回值。

使用dbms_output.put_line将var_res和var_y的值打印输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值