Oracle 存储过程(procedure)和函数(Function)小结

本文详细介绍了Oracle存储过程和函数的区别,包括返回值和调用方式的不同,并展示了如何在Oracle函数中返回表对象,包括创建表对象类型和两种返回方式。此外,还探讨了Oracle复杂自定义函数的写法,提供了一系列实例供读者参考。
摘要由CSDN通过智能技术生成

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))</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle存储过程函数是用PL/SQL语言编写的数据库对象,用于实现复杂的业务逻辑和数据处理。存储过程函数可以在数据库中进行定义和调用,提供了很大的灵活性和可重用性。 存储过程是一组SQL语句和控制结构的集合,可以接受输入参数并返回结果。它们可以用于执行常见的数据库操作,如插入、更新、删除数据,以及执行复杂的业务逻辑。存储过程可以在数据库中进行定义,并通过名称来调用执行。 函数是一个具有输入参数和返回值的可执行代码块。它们可以用于计算和返回单个值,例如数学运算、字符串处理或日期操作。函数可以在SQL查询中使用,并且可以像内置函数一样进行调用。 下面是一个示例存储过程的代码: ```sql CREATE OR REPLACE PROCEDURE get_employee_details (p_employee_id IN NUMBER, p_details OUT SYS_REFCURSOR) AS BEGIN OPEN p_details FOR SELECT * FROM employees WHERE employee_id = p_employee_id; END; ``` 上面的存储过程接受一个员工ID作为输入参数,并通过游标将该员工的详细信息返回给调用者。 下面是一个示例函数的代码: ```sql CREATE OR REPLACE FUNCTION calculate_salary_bonus (p_employee_id IN NUMBER, p_bonus_percentage IN NUMBER) RETURN NUMBER AS v_salary NUMBER; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = p_employee_id; RETURN v_salary * p_bonus_percentage / 100; END; ``` 上面的函数接受一个员工ID和奖金百分比作为输入参数,并返回计算后的奖金金额。 存储过程函数可以通过CREATE PROCEDURE和CREATE FUNCTION语句在Oracle数据库中进行定义。一旦定义好,它们可以通过名称进行调用,可以在其他存储过程函数SQL查询中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值