oracle存储过程的创建与使用

项目6总结:创建与使用存储过程 主要是创建简单存储过程,游标的存储过程及创建和使用事务 阅读详情
在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。
1、单个存储过程的创建
CREATE OR REPLACE PROCEDURE PROC_TEST IS
  count number;					---声明变量
  BEGIN

     select * from dual;		---将SQL语句放在BEGIN 和END之间

  EXCEPTIOIN					---异常处理,可以不写,看具体情况决定
    WHEN NO_DATA_FOUND THEN 	---写异常处理的方法
    WHEN OTHERS THEN			---写异常处理的方法
        
  END PROC_TEST; 				---这里的PROC_TEST是方便看什么方法或语句体的结束(方便阅读)。也可以直接写成: "END;"
2、使用存储过程包创建
2.1、 先声明存储过程(先创建包)

存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。

CREATE OR REPLACE PACKAGE PKG_Test IS
--------------------------------------------------------------------------------------
								---不带参数的存储过程
        PROCEDURE update_user;
        
--------------------------------------------------------------------------------------
								---带参数的存储过程
        PROCEDURE get_user(p_food IN VARCHAR2, p_amount IN NUMBER);
        
END PKG_Test ;
2.2、 编写存储过程内容
CREATE OR REPLACE PACKAGE BODY PKG_Test IS	---需要写存储包名字 PKG_Test 

--------------------------------------------------------------------------------------
								---不带参数的存储过程
--------------------------------------------------------------------------------------
	PROCEDURE update_user IS
	   name VARCHAR2(12);	--参数声明
	   BEGIN
	
	      ...
	
	   EXCEPTION
	          WHEN NO_DATA_FOUND THEN
	               DBMS_OUTPUT.PUT_LINE('无数据记录');
	          WHEN OTHERS THEN
	               DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode);  ---sqlcode代表异常代码
	               DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm);  ---sqlerrm代表异常信息
	   END update_user;

--------------------------------------------------------------------------------------
								--带参数的存储过程
--------------------------------------------------------------------------------------
	PROCEDURE get_user(		---in前缀作为输入参数,out前缀作为输出参数
				          in_datestr in varchar2,  		---日期,格式:yyyyMMdd
		                  out_is_success in out number, ---是否查询成功(1-查询成功、0-查询失败)
		                  out_detail out sys_refcursor 	---结果
						 ) IS
						 
	name VARCHAR2(12);	--参数声明
	
	BEGIN
      	open out_detail for		---out_detail 查询结果集会存在这并返回,如果返回的不是一个结果集
      							---可以在存储过程传参处写上你要返回的结果及类型,查询到数据给其赋值即可
      		select t.id,t.name,t.age from t_user t where t.creation_date > to_date(in_datestr,'yyyy-mm-dd hh24:mi:ss');
		out_is_success := 1;
	
	    EXCEPTION
		    WHEN NO_DATA_FOUND THEN
	        	DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN');
	      	WHEN OTHERS THEN
	      		out_is_success := 0;
	            DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode);  ---sqlcode代表异常代码
	            DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm);  ---sqlerrm代表异常信息
	END get_user;

END PKG_Test;
3、PLSQL调用存储过程
declare out_is_success number;
		out_detail sys_refcursorp;
begin
   --调用存储过程
   get_user('2021-01-01 00:00:00',out_is_success, out_detail);
   dbms_output.put_line('输出结果:'|| out_detail);
end;
4、java代码调用存储过程
try {
	// 创建存储过程的对象
	CallableStatement c = conn.prepareCall("{call test_in_out_exception(?,?,?)}");
	
	// 给存储过程参数赋值,
	c.setString("in_datestr", "2021-01-01 00:00:00");				//输入参数,根据类型来赋值
	cs.registerOutParameter("out_is_success", OracleTypes.NUMBER);	//返回结果,赋值用OracleTypes类提供的参数
	cs.registerOutParameter("out_detail", OracleTypes.CURSOR);		//输出结果集,赋值用OracleTypes类提供的参数
	// 执行存储过程
	c.execute();
	
	ResultSet rs = (ResultSet) cs.getObject("out_detail");
	while (rs.next()) {
		int age = rs.getInt("age");
		String id = rs.getString("id");
		String name = rs.getString("name");
		System.out.println(id + name + age);
	}
} catch (SQLException e) {
	System.out.println("SQLState : " + e.getSQLState());
	System.out.println("ErrorCode : " + e.getErrorCode());
	System.out.println("Message : " + e.getMessage());
	System.out.println("LocalizedMessage : " + e.getLocalizedMessage());
	e.printStackTrace();
} finally {
     conn.close();
}

参考文章

Oracle 存储过程包(Package、Package Body)
oracle如何创建存储过程和调用
Oracle存储过程的调用(返回参数)

【Oracle】存储过程和触发器 以命令方式创建存储过程创建存储过程使用语句,语法格式为:CREATE [OR REPLACE] PROCEDURE <过程名> /*定义过程名*/[ (<参数名> <参数类型> <数据类型> [ DEFAULT <默认值>] [, …n])] /*定义参数类型及属性*/[<变量声明>] /*变量声明部分*/BEGIN。 阅读详情

相关推荐

SQL Server 数据库----存储过程的创建及使用

一、存储过程 1、存储过程 存储过程(Stored Procedure) 是一组为了完成特定功能的SQL 语句集,经编译后存储在服务器端数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来执行它。 2、存储过程的分类 (1)系统存储过程:由SQL Server系统提供的存储过程,主要存储在master数据库和用户数据库中,主要实现一些系统的管理功能和数据库对象管理功能。 (2)用户自定义存储过程:由用户根据需要创建...

weixin_47904223的博客 1万+

Oracle 存储过程详细介绍及如何使用

在上述示例中,存储过程 your_stored_procedure 没有输入参数,也没有输出参数。您可以在存储过程的逻辑部分编写您需要的操作,例如查询数据并进行处理,输出消息等。请根据您的实际需求修改示例代码,并将适当的逻辑放在存储过程中。执行该存储过程时,可以使用 EXEC your_stored_procedure;或者 CALL your_stored_procedure;来调用它。在执行过程中,存储过程中的逻辑将被执行,并将结果输出到 DBMS_OUTPUT,您可以通过适当的方式查看输出结果。

小白记录 1万+

将点云坐标转换成世界坐标的demo

将点云坐标转换成世界坐标的demo

howard789的博客 2206

存储过程的创建和使用

      mysql工作中用的比较多了,但是总觉得做为2年半的开发人员 对存储过程不太掌握和了解的话未免有些说不过去,所以最近几天学习了一下存储过程,发现还是比较简单的,下面就简单的记录和总结一下。 1.存储过程的语法结构 create procedure 存储过程名称(参数);//可以无参,也可以带参数,和java的方法名差不多 有参数的设置:(in|out|inout 参数名称 数据类...

toString的博客 2万+

说说PSTN、ISDN、 ADSL三种互联网接入方式的区别。

互联网的接入方式: 电话拨号接入(PSTN) ISDN接入 ADSL接入 Cable MODEM接入 局域网接入 光纤接入(FDDI) 卫星接入 DDN专线 目前来说,ADSL和Cable MODEM比较常用,今天我们就先来说说PSTN、ISDN和ADSL的区别。 电话拨号接入(PSTN/POTS,Public Switched Telephone Network / Public Oold Telephone Service) 数据终端设备(DTE)通过数据通信设备(DCE)再连

Winyaz的博客 2万+

FineBI制作数据可视化大屏-数据连接(1)

快速上手大屏可视化,FineBI数据连接配置。

Pangaoyang_的博客 1913

oracle存储过程的创建和使用,oracle 存储过程创建和使用举例

oracle 存储过程创建和使用举例1.创建存储过程create or replace package pk_1 as //创建包的声明TYPE cur is ref cursor; //声明一个指针procedure p1(cr out cur);end;/create or replace package body pk_1 as //创建包体procedure p1(cr out cur...

weixin_39909212的博客 385

Android 13 wificond讲解

Android 13 wificond讲解

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 2932

oracle存储过程的创建和游标的使用

第一个例子: call insertTable(); (在创建的时候insertTable不能写成insertTable()) create or replace procedure insertTable is begin   --新建游标suts   Declare cursor suts is select * from sys_user_temp;   begin     --开始循环 ...

zx_view的博客 5929

【人工智能】向量数据库全生命周期数据安全防护体系:破解向量化与检索双环节泄露风险

大模型时代,向量数据库已成为RAG(检索增强生成)架构、语义检索、多模态应用的核心基础设施,解决了大模型幻觉、长上下文窗口限制、私有知识落地等核心痛点。但行业普遍存在认知误区:将Embedding向量等同于“无害的语义压缩乱码”,忽视了向量数据原生的泄露风险。

奶爸的编程之路,也就一周冷个三天 159

零基础教你学RDMA驱动开发:从入门到精通--第6章 内存管理与DMA映射​6.2 DMA地址转换:内核dma_map_single()与硬件IOVA(I/O虚拟地址)​

本文深入探讨RDMA驱动中DMA地址转换机制,重点分析内核dma_map_single()函数与硬件IOVA的作用。主要内容包括:1)DMA地址转换的必要性,解决CPU虚拟地址与HCA设备DMA地址的空间割裂问题;2)内核DMA映射机制实现原理,涵盖无IOMMU(直接物理地址映射)和有IOMMU(IOVA转换)两种场景;3)硬件IOVA的工作流程及其与RDMA内存注册的结合;4)RDMA驱动开发中的关键问题,如缓存一致性、映射方向错误、IOVA泄漏等;5)以mlx5驱动为例的实践分析。文章强调DMA地址转换

xiaoheshang_123的博客 239

dbeaver创建存储过程_oracle存储过程基本使用

存储过程在数据库开发的过程中使用比较频繁,它也有着普通sql语句不可替代的作用,可以有效的提程序的执行效率。存储过程可以简单的理解为在数据库中执行的某种带特定功能的程序,其中包含一条或多条sql语句,它的语法大体与PLSQL相同,也有其自身的不同。首先我们创建一张表create table class(id int not null,--班级idclass_name varchar2(20)--班...

weixin_42531923的博客 1万+

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2420

oracle对存储过程授权,【oracle】oracle使用存储过程创建用户并授权

oracle使用存储过程创建用户并授权(版本1)20181103背景:DBA平时工作创建用户频率还是蛮高的,故写一个存储过程简化创建用户的步骤代码如下:/*创建存储过程的用户:system功能:通过传入用户名/密码/表空间创建用户并授权connect和resource角色(前提是已有这个表空间)*/create or replace procedure proc1(newUser in var...

weixin_35260789的博客 2052

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2050

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Oracle存储过程,临时表的创建、删除,变量的定义和使用

create or replace procedure Test_GetOaUserInfo  as   --authid current_user操作当前存储过程的当前用户,否则提示权限不足,但是这样存储过程这能执行一次   --,或者GRANT CREATE ANY TA

yuefengyuan的专栏 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【oracle】oracle使用存储过程创建用户并授权

                            oracle使用存储过程创建用户并授权(版本1)20181103 背景: DBA平时工作创建用户频率还是蛮高的,故写一个存储过程简化创建用户的步骤 代码如下:   /* 创建存储过程的用户:system 功能:通过传入用户名/密码/表空间创建用户并授权connect和resource角色(前提是已有这个表空间) */ create o...

debimeng 3507

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

基于Oracle数据库的PLSQL编程以及存储过程的创建和使用

前言 本文简单记录下oracle数据库中,如何用plsql编程、以及存储过程的创建和使用。 相关的概念我就不列举了,大家不清楚的可以自行搜索,本篇主要列举实际的sql语法。 那plsql编程,大家可以使用windows的命令行,也可以使用工具进行编写调试,我这边主要使用Oracle Sql Developer来举例。 1 plsql编程 1.1 程序结构 首先说说plsql的程序,可以分为3个部分:声明部分、可执行部分、异常处理部分。其中declare部分用来声明变量或者游标(结果集类型变量),如果程序中没

qq_43546561的博客 2620

Oracle 数据库如何创建并使用存储过程与调用函数

Oracle 如何创建并使用存储过程与调用函数 一、oracle存储过程的创建语法与示例 1、基本语法 create or replace procedure 存储过程名称 ( 参数别名 in 参数类型,(in为入参) 参数别名 in 参数类型,(in为入参) 参数别名 in 参数类型,(in为入参) 参数别名 out 参数类型(out为出参) ) as –定义变量– –变量名 变量数据类型;如: – numCount integer; begin –处理方法- end; 2、示例 create or re

小谢同学的博客 1194

oracle 创建保留 api,如何使用JDBC API在Oracle数据库中创建存储过程?

存储过程是子例程,是SQL语句的一部分,存储在SQL目录中。所有可以访问关系数据库的应用程序(Java,Python,PHP等)都可以访问存储过程。存储过程包含IN和OUT参数或两者。如果您使用SELECT语句,它们可能会返回结果集。存储过程可以返回多个结果集。要使用JDBC API在(MySQL)数据库中创建存储过程,您需要-注册驱动程序:使用DriverManager类的registerDri...

weixin_36147152的博客 212

oracle 存储过程 的创建以及使用

1.概念     存储过程: 实际上是封装在服务器上一段PLSQL代码片断,已经编译好了的代码             客户端取调用存储过程,执行效率就会非常高效     语法:       create [or replace] procedure 存储过程的名称(参数名 in|out|in out 参数类型,参数名 in|out|in out 参数类型)       is | as    ...

胡萧徒的博客 4482

oracle调用存储过程指定参数,Oracle 使用OUT参数创建/调用存储过程

1.OUT类型的参数由存储过程传入值,然后由用户接受参数值。下面通过SCOTT.EMP表创建一个搜索过程,该过程将根据所提供的EMPNO列的值检索雇员的ENAME和SALsql> create or replace procedure search_employee(2 empno_param in number,3 name_param out emp.ename%type,4 sa...

weixin_42503660的博客 1089

oracle 创建会话表,oracle临时会话表在存储过程中的使用

本帖最后由 zeh368 于 2015-9-18 18:55 编辑问题:在将db2的存储过程转换为oracle的过程中,涉及到临时会话表,会出现问题:具体描述:原db2中的存储过程涉及临时会话表的部分:--创建临时会话表DECLARE GLOBAL TEMPORARY TABLE COL_NAMES(id integer,COLNAMES varchar(50))WITH REPLACE NOT ...

weixin_34984235的博客 625

Oracle数据库笔记(基于oracle数据库的PLSQL编程以及存储过程的创建和使用)

Oracle数据库笔记(基于oracle数据库的PLSQL编程以及存储过程的创建和使用)

qq_44638443的博客 1381

oracle+out的使用,Oracle 使用OUT参数创建/调用存储过程

1.OUT类型的参数由存储过程传入值,然后由用户接受参数值。下面通过SCOTT.EMP表创建一个搜索过程,该过程将根据所提供的EMPNO列的值检索雇员的ENAME和SALSQL> create or replace procedure search_employee(2 empno_param in number,3 name_param out emp.ename%type,4 sa...

weixin_34553415的博客 462

Oracle存储过程创建和使用

基本概念 存储过程其实就是一组用于完成特定数据库功能的SQL语句集,在日常中大量使用,它被编译后存储在数据库中,根据定义的存储过程名称来调用并执行,从而完成复杂的数据库操作。 优点 1.存储过程使一些复杂的数据库操作与代码直接分离,便于扩展和维护,也提高了数据的安全性。 2.存储过程可以重复利用,只需要带不同的参数即可,提高了程序的性能。 3.存储过程执行效率高,只需要在创建的时候编译,以后每次执...

qq_33261885的博客 612
上一篇: @Query的使用
下一篇: idea快捷键
chen_xionxion
博客等级 码龄7年 9粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值