广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle存储过程新手入门教程(通俗理解存储过程)
  • 621
分享到

Oracle存储过程新手入门教程(通俗理解存储过程)

摘要

目录一、存储过程通俗理解二、创建存储过程基本语法(汇总)三、执行存储过程的方式(5种)四、网上现有的创建存储过程的两种方式解释(看注释)五、一些存储过程示例(仅供参考)六、其他语法七

一、存储过程通俗理解

  • 简单理解存储过程是数据库sql的操作语言,用于操作表数据,类似Java的方法,可以有入参,也可以有出参。开发存储过程需要熟悉一定的语法;
  • 存储过程是可以包含多个操作,如:表增删改查、判断、循环、异常捕获、嵌套存储过程等;
    • 举栗:有个业务需求,要求每天对购买商品大于1000元的买家发送抽奖信息短信及积分等级。 Java实现逻辑(仅仅是举例哈)可能是通过订单服务查询订单,然后再去用户服务查询用户信息,然后再去积分服务获取积分,获取以上数据后,再通过定时任务去执行该需求。
    • 分析:以上的操作涉及多个服务,并且发生多次数据库网络io连接,多次网络交互会造成性能开销大,导致不必要的资源浪费。 而若通过存储过程实现,则逻辑是:【创建存储过程–查询用户表–查询订单表–查询积分表,使用存储过程对上述数据遍历判断,数据插入到短信推送信息表】,这时Java代码只需要一次与数据库的IO链接获取短信推送信息,直接去执行发送短信即可。
  • oracle数据库有声明,只要是对数据的操作可以使用存储过程执行,速度比其他语言获取数据再加工要快。

二、创建存储过程基本语法(汇总)

CREATE OR REPLACE PROCEDURE P_存储过程名(变量名 IN|OUT 数据类型)   -- 存储过程名称通常以P_开头
IS													-- IS作为申明变量的关键词
	V_NUM   	NUMBER;								-- 声明NUMBER类型的变量,后以分号结束
	V_USERNAME  VARCHAR2(40);						-- 声明VARCHAR2类型的变量
	V_SORT		INTEGER;							-- 声明Integer类型的变量
	V_IS_BIND   NUMBER(12);							-- 声明长度为12的NUMBER类型变量
	V_NAME 		T_USER.NAME%TYPE; 					-- 声明变量直接赋值(表中NAME类型和长度就是V_NAME的类型和长度)
	V_USER 		T_USER%ROWTYPE;						-- 声明记录型变量,相当于Java的对象,可以使用点加变量名获取值
	CURSOR T_USER IS SELECT NAME,AGE FROM T_USER;	-- 声明游标
	-- 此处只作演示所用,其他变量声明可参考博文下面的示例及注释;
BEGIN												-- 执行代码开始
	-- 执行的代码逻辑,类似Java的方法体
	V_USER := '张三';								-- 给变量赋值。语法是冒号后面跟等号
	DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'YYYYMMDD'));	-- 打印语句,相当于Java中的println方法
EXCEPTION											-- 异常
  WHEN OTHERS THEN ...								-- OTHERS相当于Java中的Exception,会捕获所有异常
END;												-- 执行代码结束,以分号结束,也有一些是END后跟储存过程名加分号

三、执行存储过程的方式(5种)

-- 方式一,在SQL>后面执行
EXEC 存储过程名(参数..);
或
EXECUTE 存储过程名(参数..);

-- 方式二,在PL/SQL Developer的SQL窗口中执行(下有图)
BEGIN
	存储过程名(参数);	-- 执行的存储过程需要加分号
END;

-- 方式三,在PL/SQL Developer的Test窗口中执行,可执行debug,或者编译(下有图)
BEGIN
	存储过程名(参数);	--该种调用方式可调试
END;

-- 方式四,Java代码调用
CallableStatement callableStatement = connection.divpareCall("{call 存储过程名(?)}");

-- 方式五,在Mapper中调用,有入参和出参,使用<![CDATA[]]>包裹
<![CDATA[
	{CALL 存储过程名(#{name,mode=IN,jdbcType=VARCHAR},#{age,mode=OUT,jdbcType=INTEGER})}
]]>

四、网上现有的创建存储过程的两种方式解释(看注释)

-- 方式一:该方式类似创建一个Java类,形成一个P_PUSH_MSG.sql的文件,该可以编译后保存在数据库,方便以后执行;
CREATE OR REPLACE PROCEDURE P_PUSH_MSG(V_RETCODE OUT VARCHAR2, V_RETINFO OUT VARCHAR2) IS...


-- 方式二:该方式类似直接写的main方法,或者sql语句,不是文件,直接复制粘贴到其他地方执行、测试等。概念与上面方式一样;
DECLARE
	V_IS_BIND   NUMBER(12);
BEGIN
	...
END;

五、一些存储过程示例(仅供参考)

-- 示例一:数据库造数,不用手动插入了
DECLARE
  I NUMBER := 0;
BEGIN
  FOR I IN 1 .. 500 LOOP					-- 循环语法,循环500次
    INSERT INTO T_USER
      (ID, USERID, USERNAME, AGE, CREATE_TIME)
    VALUES
      (I, 'U_' + I, 'XXYZ' + I, I, SYSDATE);
  END LOOP;									-- 循环语法结束
  COMMIT;									-- 事务提交
END;
-- 示例二:
CREATE OR REPLACE PROCEDURE P_ORDER_LIST(V_IN_DATE NUMBER) IS
BEGIN
  DECLARE									-- CREATE OR REPLACE PROCEDURE里面是可以有DECLARE的
    V_IS_BIND   NUMBER(12);
    V_IS_WORK NUMBER(12);
    V_COUNT_DATE    NUMBER(12);
  BEGIN
	V_COUNT_DATE := V_IN_DATE;
	DELETE FROM T_PUSH_MSG_TEMP WHERE DT = V_COUNT_DATE; --删除临时表表 T_PUSH_MSG_TEMP

	FOR I IN (SELECT A.ID CPU_ID, A.UCXM, A.ORGID, L.NAME ORGNAME, Y.REGINON_ID, Y.REGINON_NAME FROM JYXX A
				LEFT JOIN (SELECT LBO.ID   BRANCH_ID,LBO.ID   REGINON_ID,LBO.NAME REGINON_NAME FROM ORGANIZATION N1) Y
				  ON A.ORGID = Y.BRANCH_ID
				LEFT JOIN ORGANIZATION L
				  ON A.ORGID = L.ID) LOOP		-- 循环语法为:FOR X IN () LOOP...
	  
	  -- 插入表
	  INSERT INTO T_PUSH_MSG_TEMP
		(DT, CPU_ID, CPU_NAME, IS_BIND, IS_BIND_RATE, REGION_ID, REGION_NAME, BRANCH_ID, BRANCH_NAME)
	  VALUES
		(V_COUNT_DATE,
		 I.CPU_ID,
		 I.UCXM,
		 V_IS_BIND,
		 CASE V_IS_WORK WHEN 0 THEN 0 ELSE		-- CASE WHEN 用法
		 ROUND(V_IS_BIND / V_IS_WORK, 2) END,   -- ROUND函数用法
		 I.REGINON_ID,
		 I.REGINON_NAME,
		 I.ORGID,
		 I.ORGNAME);
	END LOOP;
  END;
END;
-- 示例三:
CREATE OR REPLACE PROCEDURE P_QYWX_TEXT_SHYJ_MSG() IS
	V_COUNT          	NUMBER; 				-- 数量
BEGIN  
	SELECT COUNT(*) INTO V_COUNT FROM T_ENTRY_INFO WHERE ENTRY_DT = V_DATE;		-- 赋值用法,INTO关键字到变量V_COUNT中
	IF V_COUNT = 0 THEN                                                         -- IF判断用法
		-- 业务开始
		FOR A IN (SELECT CHARGE_NAME FROM T_ENTRY_INFO WHERE DEPT IN ('好好学习部','天天向上部')) LOOP	-- 循环用法
			SELECT SEQ_ENTRY_INFO.Nextval INTO ID FROM DUAL;					-- 查询序列
			INSERT INTO T_PUSH_MSG
				(ID, BUSINESS_TYPE, RECIVE_MOBILE, RECIVE_NAME, TITLE, CONTENT, CONTENT_ORDER, STATUS, CREATE_DATE, UPDATE_DATE)
			VALUES
				(ID,
				'DX',
				(SELECT MOBILE FROM T_EXT_USER WHERE NAME = A.CHARGE_NAME),
				A.CHARGE_NAME,
				'PLSQL',
				'存储过程示例',
				ID,
				'无',
				SYSDATE,
				NULL
			);
		END LOOP;
	ELSIF V_COUNT <10 THEN							-- 判断语句,类似Java的else if。 注意:这里是ELSIF,少个字母E
		DBMS_OUTPUT.PUT_LINE('T_ENTRY_INFO表记录数少于' || V_COUNT || '条。'); -- 拼接语法,使用双竖线拼接,相当于Java的加号
	ELSE											-- 判断语句,相当于Java的else
		DBMS_OUTPUT.PUT_LINE('T_ENTRY_INFO表记录数大于' || V_COUNT || '条。');
	END IF;
EXCEPTION											-- 异常捕获语句
  WHEN OTHERS THEN									-- OTHERS关键字,相当于Java中的Exception
	DBMS_OUTPUT.PUT_LINE(SQLERRM)					-- 异常原因:使用SQLERRM关键词相当于Java代码中的堆栈信息
END;

六、其他语法

DROP PROCEDURE 存储过程名;	-- 删除存储过程名

SET SERVEROUTPUT ON;		-- 若是没有执行输出语句,可以使用该命令

七、总结

到此这篇关于Oracle存储过程新手入门的文章就介绍到这了,更多相关Oracle存储过程入门教程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Oracle存储过程新手入门教程(通俗理解存储过程)

本文链接: https://www.lsjlt.com/news/198312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle存储过程新手入门教程(通俗理解存储过程)
    目录一、存储过程通俗理解二、创建存储过程基本语法(汇总)三、执行存储过程的方式(5种)四、网上现有的创建存储过程的两种方式解释(看注释)五、一些存储过程示例(仅供参考)六、其他语法七...
    99+
    2023-03-03
    oracle如何创建存储过程 oracle数据库存储过程调用 oracle的存储过程写法
  • dotConnect for Oracle入门指南(七):存储过程
    【下载dotConnect for Oracle最新版本】dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的...
    99+
    2022-10-18
  • Oracle存储过程怎么理解
    今天小编给大家分享一下Oracle存储过程怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、存储过程通俗理解简单理解...
    99+
    2023-07-05
  • oracle如何导入存储过程
    要导入存储过程到Oracle数据库中,可以使用以下方法:1. 使用SQL Developer工具导入存储过程:- 打开SQL Dev...
    99+
    2023-08-23
    oracle
  • oracle通过存储过程上传list保存功能
    一、创建oracle 需要保存的数据类型type和存储过程produce create TYPE "AL01TYPE" ...
    99+
    2022-11-12
  • 通过OCILIB连接oracle执行存储过程
    #include <iostream> #include "ocilib.hpp" using namespace std; using nam...
    99+
    2022-10-18
  • Oracle存储过程案例详解
    创建简单存储过程(Hello World) 为了方便读者简单易懂,我将下面使用到的表复制给大家。 具体表中的数据,请大家自己填写 -- Create table create t...
    99+
    2022-11-12
  • mysql通过存储过程来判断列(字段)是否存在教程
    下文给大家带来mysql通过存储过程来判断列(字段)是否存在教程有关内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完mysql通过存储过程来判断列(字段)是否存在...
    99+
    2022-10-18
  • oracle如何通过存储过程上传list保存功能
    这篇文章将为大家详细讲解有关oracle如何通过存储过程上传list保存功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建oracle 需要保存的数据类型type和存储过程producecreat...
    99+
    2023-06-15
  • oracle Dbeaver存储过程语法详解
    可视化工具 Dbeaver 基本语法 增 CREATE OR REPLACE PROCEDURE addStudent IS BEGIN INSERT INTO...
    99+
    2022-11-12
  • 【数据库入门到精通】mysql的存储过程实战
    前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云社区专家博主😉😉 💕...
    99+
    2023-09-20
    数据库 mysql 原力计划
  • MySQL存储过程怎么理解
    MySQL存储过程是一段预先编译好的SQL代码块,可以被多次调用和执行。它可以接受参数、执行SQL语句、执行控制流程和返回结果。存储过程的主要目的是将一系列的SQL操作组合在一起,并在数据库服务器上进行执行。这样可以提高数据库的性能,减...
    99+
    2023-08-11
    MySQL
  • MySQL通过函数存储过程批量插入数据
    目录数据库 mysql批量插入数据函数存储过程附:MySQL通过函数批量插入数据总结数据库 mysql批量插入数据函数存储过程 -- 1 批量插入数据 -- 1.1 创建表 CREA...
    99+
    2022-11-13
  • 分解oracle存储过程或函数调试过程步骤
    目录第一步:选择调试模式第二步:输入测试数据第三步:点击开始调试器第四步:输入要显示的变量名第五步:点击单步调试第六步:逐步点击单步调试,并查看变量的变化第七步:不断重复前六步,直到...
    99+
    2022-11-12
  • Oracle存储过程与函数的详细使用教程
    目录一、存储过程1、存储过程的创建2、存储过程的调用及删除3、存储过程的使用4、存储过程的查询二、函数1、函数的创建2、函数的调用与删除3、函数的使用4、函数的查询补充:存储过程与存储函数的区别和联系总结一、存储过程 存...
    99+
    2022-07-18
    oracle查看存储过程 oracle存储过程怎么调用 oracle存储过程和函数的区别
  • MySQL存储过程理解和作用
    存储过程是存储在数据库目录中的一段声明性SQL语句。方便其他应用程序可以调用存储过程。 储存器的作用 1, 通常存储过程有助于提高应用程序的性能。 2,存储过程有助于减少应用程序和数据库服务器之间的流...
    99+
    2022-10-18
  • 怎么理解SQL的存储过程
    本篇文章为大家展示了怎么理解SQL的存储过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、MySQL的存储的过程:一个存储过程是一个可的函数,它在中创建并保存。...
    99+
    2022-10-18
  • PHP数据类型存储教程:从入门到精通!
    PHP是一种流行的服务器端编程语言,它的应用范围广泛,从网站开发到数据处理都有着广泛的应用。在PHP编程中,数据类型的存储是非常重要的一部分,因为程序中的所有数据都需要存储在内存中。本文将带您从入门到精通,深入了解PHP数据类型的存储方式。...
    99+
    2023-10-16
    数据类型 存储 教程
  • oracle存储过程提示表不存在如何解决
    当Oracle存储过程提示表不存在时,可以采取以下解决方法:1. 检查表名是否正确:确认存储过程中引用的表名是否正确输入,包括大小写...
    99+
    2023-09-16
    oracle
  • dotConnect for Oracle入门指南(九):在数据集中使用存储过程
    【下载dotConnect for Oracle最新版本】dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作