oracle if函数变量,Oracle数据库的常用对象(三)----PL/SQL 语法、存储过程

(三)PL/SQL

Procedure Language / SQL    存储过程

命名程序:存储过程,函数,触发器

--------------------------------------基础语法--------------------------------------------

1. 语句块:

begin

dbms_output.put_line('HelloWorld');

end;

2. 定义变量

declare

num number(4);

name varchar2(10);

begin

num := 1001;

name := 'amui';   -- :=是赋值操作

dbms_output.put_line(num || ':' || name);     --||连接字符串,相当于+

end;

3. if语句

a) 示例1:

declare

age number(2);

begin

age := 19;

if age > 20 then

dbms_output.put_line('A');

else

dbms_output.put_line('B');

end if;           --要记得end if

end;

b) 示例2:

08ff289273663aab027823aa457f26e4.png

4. case结构

5b7ca632ddb12f4eafa6304354daf2f9.png

5. 循环

a) loop循环语法实例:

7566c8d2eb050358e0f2c57e7a9cd05f.png

b) while循环语法实例

7017396cd1ed7ba93a0d9dc3c3e97a10.png

c)for循环语法实例

a7cff056cc1fea1400fd2c6a94840ac9.png

6. PL语句与SQL语句结合使用

a) 示例1:插入一条数据:

其中,在declare定义语句中,v_empno emp.empno%type表示v_empno的类型是参考自数据库

中表emp中的属性empno的类型。

0249b46533fd25c8510991a698ed4c27.png

b) 示例2:查询数据(查询某个具体值,将其赋给PL中的变量)

注意与常规SQL语句不一样

select ename into v_ename from emp where empno = v_empno;

a6671165a4ad06ef511a46b0981fcd7b.png

c) 示例3:

语句 v_emprowData emp%rowtype; 表示变量 v_emprowData 参考自表emp中的一行数据。

变量v_emprowData相当于一个对象。

67bdba9e639f001d7e86ac447729de7d.png

--------------------------------------存储过程------------------------------------------

1. 存储过程定义:(无参存储过程)

d683cb3fb11bb65692af0b579aff6eff.png

2. 调用存储过程的方式:

a) 命令调用:

exec my_pro1;

b) 过程调用:

begin

my_pro1;

end;

c) 使用Java程序调用:

{call my_pro1}

3. 有参存储过程:

a) 需求:创建一个存储过程,根据员工编号返回员工信息。

在该参数列表中,可以写成 v_empno number , 但是number上不能标识长度大小。

in 表示传入的参数,out表示传出参数,即返回值。

222f1d1f3ed5e2ecfd9d408a07e5bfad.png

b)调用带有输入参数和输出参数的存储过程:

9fe3f0c65fe11304b28eac67f94083ba.png

不能使用命令调用带有输出参数的存储过程!

4. 自联表

如果输入输出参数的类型一样,可以简写如下:

5ae8df86b2649c8d970b676ad90d980c.png

-----------------------------------------程序包---------------------------------------------

程序包:用于存储过程,函数,类型

1. 定义程序包:

f20a1288973d90107a6451b1fb6fcd93.png

2. 创建包体,包体的名字和包名相同

4baa6af2f6ba28fc404706d624719f77.png

3.调用包中的存储过程

exec mypack1.mypro1;

----------------------------------------游标---------------------------------------------

游标:cursor,一个内存区域,不是类型

1. 需求:创建返回一个表中多条记录的存储过程(使用游标,创建一个参照游标特性的类型)

a) 获取一条数据:

27f72cbd369d013faec3e5a1cc2c4dc2.png

b) 循环获取多条数据:

mycursor%found 表示判断,判断是否是否存在

1de9cef3d5bf6319a3b325269fe152f2.png

2.在程序包中定义参照游标的类型

a) 需求:创建一个存储过程,返回EMP表所有记录

1)创建程序包,包中定义类型

900898cb08c12bfd951fa235c52fe45f.png

2)调用包:参数中需要用到参照游标特性的类型,需要调用包

以下示例功能是根据每页数据数算出最大页数,同时返回从某一页的数据。

a84f5ea2774c32da9926881f85167235.png

3)测试:

eb4167cf728e13f36de9e28621c6d607.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值