Oracle 存储过程(procedure)和函数(Function)小结
1、Oracle 存储过程(procedure)和函数(Function)的区别
-
返回值的区别:函数有1个返回值,一般情况下是用来计算并返回一个计算结果;
而存储过程是通过参数返回的,可以有多个或者没有
-
调用的区别 :函数可以在Sql查询语句中直接调用;
而存储过程必须单独调用,一般是用来完成特定的数据操作
(比如修改、插入数据库表或执行某些DDL语句等等)
-
存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行);
而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,
因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
2、在Oracle的函数中,返回表对象
2.1、创建表对象类型
在Oracle中想要返回表对象,必须自定义一个表类型,如下所示:
create or replace type t_table is table of number;
上面的类型定义好后,在function使用可用返回一列的表,如果需要多列的话,需要先定义一个对象类型。
然后把对象类型替换上面语句中的number;
定义对象类型:
create or replace type obj_table as object
(
id int,
name varchar2(50)
);
修改表对象类型的定义语句如下:
create or replace type t_table is table of obj_table;
2.2、创建演示函数
在函数的定义中,可以使用管道化表函数和普通的方式,下面提供两种使用方式的代码:
2.2.1、管道化表函数方式
create or replace function f_pipe(s number)
return t_table pipelined
as
v_obj_table obj_table;
begin
for i in 1..s loop
v_obj_table := obj_table(i,to_char(i*i))</