Oracle 数据库(二)

一、存储过程

存储过程的英文是procedure,是SQL语句集,属于函数的一种,目的是使数据库编程化;

什么是PL/SQL?

PL/SQL 是Oracle数据库独有的语言,是SQL语句的扩展,是面向过程的语言(换句话说,是过程化SQL)实现了sql的可编程化。

PL/SQL写在存储过程中;JAVA写在类里面;

二、存储过程语法

1.创建

CREATE OR REPLACE PROCEDURE 存储过程名 [(参数1,参数2,…)]
IS
BEGIN
END 存储过程名;
注:
1.	create 和 is 之间,用来声明存储过程的参数,可以是一个,可以是多个,也可以省略不写。
2.	如何区分参数的类型,使用in 和out关键
3.	is 和begin之间,用来声明变量
4.	begin 和 end 之间,用来编写存储过程的执行内容

2.变量

变量名 数据类型[(长度)]
例:v_a number
	v_b varchar2(20)

记录类型

定义:记录类型是由多个变量组成的用户自定义类型

作用:将多个变量整合到一起,使用record关键字来声明记录类型。

语法:

type 记录类型名 is record
(
	变量名 数据类型[(长度)],
	变量名 数据类型[(长度)],
	…
);
例子:
type student_recor is record
	(
		v_name student.name%type,
		v_class student.class%type
	)

方法二:
--用%rowtype动态获取某表所有字段信息(字段名&数据类型)
--使用方法同记录类型
v_a emp%rowtype;
select * into v_a from emp where no = 0001;
dbms_output.put_line(v_a.name);

动态数据类型

当我们不清楚要声明的变量,或者记录类型中包含的变量的数据类型时,可以采用动态获得数据类型的方式。

语法:

变量名 表名.列名%type

例:v_name  emp.name%type;

3.条件分支

IF语法

IF 条件 THEN 满足条件后的执行体
[ELSIF 条件 THEN 满足条件的执行体]
ELSE 未满足条件的执行体
END IF;

CASE语法

CASE 
WHEN 比较值 THEN 执行体
WHEN 比较值 THEN 执行体
…
ELSE 未比较成功的执行体
END CASE;

4.循环

语法1(类似于JAVA的while循环)

WHILE 循环条件 LOOP
循环体
END LOOP;

语法2(类似于JAVA的for循环)

FOR 循环变量名 IN [REVERSE] 循环次数 LOOP
循环体
END LOOP;

--利用reverse关键字可以使for循环进行逆序

语法3(类似于JAVA的do-while循环)

LOOP
循环体
EXIT WHEN 循环条件;
END LOOP;

5.游标

游标由一个结果集和一个指针组成,结果集可以包含多行多列的数据,是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

游标写法

--第一步:创建游标
CURSOR 游标名 IS 查询语句;
--第二步:打开游标(形成指针)
OPEN 游标名
--第三步:利用指针,从游标中取值,将取到的值装进变量中存储
FETCH 游标名 INTO 变量
--第四步:输出变量中的内容
dbms_output.put_line();
--第五步:关闭游标
CLOSE 游标名;

隐式游标

游标分为两种,一种是显示游标,一种是隐式游标

显示游标是我们自己定义出来的游标,

隐式游标是在执行DQL语句时,数据库自动生成的游标,统一命名sql

​​​​​​​游标(不论显示还是隐式)常用的属性:

%found

%notfound

%isopen

%rowcount

6.​​​​​​​带参存储过程

参数类型:输入参数/输出参数

CREATE OR REPLACE PROCEDURE 存储过程名 
(
	参数名 IN/OUT 数据类型,
	参数名 IN/OUT 数据类型,
	…
	参数名 IN/OUT 数据类型
)
IS
BEGIN
END 存储过程名;

--先定义参数名,
然后用关键字IN或者OUT来确定参数的类型,
IN代表输入参数(相当于JAVA方法中的形参),
OUT代表输出参数(相当于JAVA方法中的返回值),
然后数据类型的声明与变量数据类型的声明不同,
就是无需指定类型长度。
例:i_a  in  number
	o_b  out  varchar2

7.​​​​​​​存储过程调用

同JAVA方法之间的相互调用相同,存储过程之间也可以相互调用

调用方式:

存储过程名(参数1,参数2,参数3,…)

说明:不论输入参数,还是输出参数,在调用存储过程时,都需要将参数列表填满,保证参数的数量,顺序,类型一致。

8.​​​​​​​异常处理

例:CREATE OR REPLACE PROCEDURE GG.异常
IS
BEGIN
		dbms_output.put_line(10 / 0);
		dbms_output.put_line('哈哈');
exception 
when zero_divide then 
		dbms_output.put_line('哈哈丢了');
END 异常;

常见的异常类型:

zero_divide:称作除数为0异常

no_data_found:称作数据没有找到异常

value_error:称作值错误异常

Oracle 数据库(一):Oracle 数据库(一)

后续补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀神lwz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值