存储过程与函数

本文探讨了数据库中的两种重要组件——存储过程和函数。存储过程不直接返回值,常用于执行一系列操作,而函数则专注于计算并返回一个特定值。文章结合page_books表的应用进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储过程:没有直接返回值,主要用于执行操作。

① 创建语法
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
	 < procedure_body >
END;
/

② is与as有什么区别?
- 在存储过程与函数中,is与as没有任何区别
- 在视图中只能用as,在游标中只能用is

③ 创建存储过程的一些小细节
- 无参存储过程定义时存储过程名后面一定不能加括号!!!报错:Warning: Function created with compilation errors
- 无参存储过程调用时可以加括号也可以不用加,可以通过PL/SQL调用,也可以通过execute关键字调用
- 有参存储过程的参数类型一定不能指定精度!!!否则报错:Warning: Procedure created with compilation errors
- 利用  表名.字段%type   可以取到表中某个字段的具体类型,方便给我们声明的变量时设置它的类型 如 price page_books.price%type;
利用PL/SQL DEVELOPER工具执行存储过程时,如果存储过程中有输出内容想要看到,必须先执行下面的命令
set serveroutput on;
⑤ 例:创建有参存储过程
CREATE PROCEDURE addBook(title in varchar2,price in number,author in varchar2,pt in date)
AS
BEGIN
	insert into page_books (title,price,author,publish_date) values(title,price,author,pt);
END;
/

调用有参存储过程
- 方式一
DECLARE
	title page_books.title%type := 'title18';
	price page_books.price%type := 50.55;
	author page_books.author%type := 'author18';
	pt page_books.publish_date%type := sysdate;
BEGIN
	addBook(title,price,author,pt);
END;
/
- 方式二
EXECUTE addBook('book19',100,'author19',sysdate);

例:创建无参存储过程
CREATE PROCEDURE sayHello
IS
BEGIN
	DBMS_OUTPUT.put_line('Hello!');
END;
/

调用无参存储过程

- 方式一
BEGIN
	sayHello();
END;
/
- 方式
BEGIN
	sayHello;
END;
/
- 方式三
EXECUTE sayHello;
-方式四
EXECUTE sayHello();

函数:返回一个值,主要用于计算并返回一个值。

①创建函数的小细节
- 函数必须包含一个return语句
- RETURN 子句指定要在函数返回的数据类型
- 函数定义的时候,无参函数名后面一定不能加括号!!!报错:Warning: Function created with compilation errors
- 函数调用的时候无参函数方法名后面可以不用加括号,有参必须加

② 例:创建有参函数
CREATE FUNCTION mul(x in double precision,y in double precision)
RETURN double precision
IS
	result double precision;
BEGIN
	result := x*y;
	RETURN result;
END;
/
调用有参函数
DECLARE 
	a double precision;
BEGIN
	a:=mul(2,10);
	DBMS_OUTPUT.put_line(a);
END;
/
例:创建无参函数
CREATE FUNCTION totalBooks
RETURN number 
IS
	totalBooks number;
BEGIN
	select count(id) INTO totalBooks from page_books;
	RETURN totalBooks;
END;
 /

调用无参函数
DECLARE
	a number;
BEGIN
	a:=totalBooks();
	DBMS_OUTPUT.put_line(totalBooks);
END;
/

关于上述用到的page_books表的相关信息如下图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值