it编程 > 数据库 > Oracle

Oracle存储过程创建方式

29人参与 2025-02-19 Oracle

前言

在做的一个功能,业务要求数据处理的一部分逻辑要通过oracle的存储过程实现,因为很少使用存储过程进行数据逻辑的处理,故进行一个记录。

一、oracle 存储过程

oracle 存储过程是一种存储在数据库中的可重复使用的代码块,用于执行特定的任务或一系列 sql 操作。

二、oracle 存储的创建

2.1 package 的创建

2.1.1 package create

定义一个 package 中的方法,类似于java 中的借口。

(示例):

create or replace package testa is
procedure find(
    pi$param1   in number,  --参数1 数字
    pi$param2   in varchar2,--参数2 字符串
    pi$param3   in date,    --参数3 日期
    --------------------输出参数-----------------------
    po$count           out number, --总条数
    po$result          out  row_types.resultset--结果集
  );
end testa ;

2.1.2 存储过程 常用的输入/输出参数类型

数字类型(number)

字符类型(varchar2、char)

定义:

用途:作为输入参数,常用于接收名称(如员工姓名、产品名称)、描述信息等字符串。作为输出参数,可以返回如格式化后的名称、错误消息等字符串。

日期时间类型(date、timestamp)

定义:

用途:在输入参数方面,可接收如订单日期、员工入职日期等日期时间值。在输出参数中,能返回如计算后的到期日期、操作完成时间等。

2.2 package body的创建

package body 是对package 中存储过程的具体实现(示例):

(1) package body 示例:

create or replace package body testa is
procedure find(
    pi$param1   in number,  --参数1 数字
    pi$param2   in varchar2,--参数2 字符串
    pi$param3   in date,    --参数3 日期
    --------------------输出参数-----------------------
    po$count           out number, --总条数
    po$result          out row_types.resultset--游标结果集
  )
  is
 -- 此处可以声明变量:在 oracle 存储过程中,使用declare关键字来声明变量。
 -- 变量声明通常放在存储过程的is或as关键字之后,begin关键字之前。声明变量的基本格式为变量名 数据类型 [ := 初始值];
 declare
    v_name varchar2(50);
    v_count number := 0;
    v_1 varchar2(50) :='';
 begin 
 	-- 此处处理业务逻辑
  -- 最后返回结果:
  -- 直接赋值
  po$count := 数量
  -- 通过select  into 赋值
   select count(1) into po$count from xxx;
  -- 通过游标返回数据集合
   open po$result for sql 语句;
  end;
  
  
end testa ;

(2) 结果集定义游标返回:

create or replace package row_types
as
  type  resultset  is ref cursor;
  type  strsplit is table of varchar2 (40);
  type  uuidarray is table of number(20);
end;

(3)使用 call 或 execute 关键字来调用存储过程:

declare
  count_1 number;
  result_1 row_types.resultset;
  type result_record_type is record (
        str1   varchar2(500),
        str2   varchar2(4000),
        str3   varchar2(500),
        str4   varchar2(500),
        str5   varchar2(500),
        str6   varchar2(500),
        str7   varchar2(500),
        str8   varchar2(500),
        str9   varchar2(500),
        str10 varchar2(500),
        str11 varchar2(500),
        str12 varchar2(500),
        str13 varchar2(500),
        str14 varchar2(500),
        str15 varchar2(500),
        str16 varchar2(500),
        str17 varchar2(500),
        str18 varchar2(500),
        str19 varchar2(500),
        str20 varchar2(500),
        str21 varchar2(500),
        str22 varchar2(500),
        str23 varchar2(500),
        num1 number,
        num2 number,
        num3 number,
        num4 number,
        num5 number,
        num6 number,
        num7 number,
        num8 number,
        num9 number,
        dt   date,
        dt1  date,
        dt2  date,
        dt3  date,
        dt4  date
    );
    result_row result_record_type;
begin
	testa.find(1,'test',count_1,result_1);
  dbms_output.put_line('dhidhdidih:'||count_1);
  loop
      fetch result_1 into result_row.str1,result_row.dt;
      exit when result_1%notfound;
      dbms_output.put_line('结果内容:'||result_row.str1 ||'=='|| 
      result_row.dt  
      );
  end loop;
  close result_1;
end;

总结

本文对 oracle 存储过程的创建进行记录。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

oracle官网下载资源报错400 Bad Request Request Header Or Cookie Too Large解决办法

02-18

Oracle建立表空间和用户方式

02-23

Oracle Redo日志损坏挽救的详细攻略

02-27

快速解除oracle dataguard的方法

03-04

Oracle登录时忘记用户名或密码该如何解决

03-04

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

02-13

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论