存储过程procedure

PostgreSql存储过程模板(PROCEDURE ) PROCEDURE 语法 CREATE [ OR REPLACE ] PROCEDURE name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) { LANGUAGE lang_name | TRANSFORM { FOR TYPE type_name } [, ... ] | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] 阅读详情

    存储过程(procedure):存储在数据库中执行某种功能的程序,就是把完成某种功能的程序存储起来,当我们想完成这个功能时直接调用存储方法,提高执行效率,因为他只编译一次。

无参的存储过程

create or replace 
procedure p
is 
cursor c 
  is
    select * from emp2 for update;
begin
  for v_temp in c loop
    if(v_temp.deptno = 10) then
      update emp2 set sal = sal + 10 where current of c;
    elsif(v_temp.deptno = 20) then
      update emp2 set sal = sal + 20 where current of c;
    else
      update emp2 set sal = sal + 50 where current of c;
    end if;
    end loop;
    commit;
end;



在数据库中调用无参的存储过程:

exec p;


或者:

begin
    p;
end;

带参数的存储过程

create or replace 
procedure p_test
  (v_a in number, v_b number, v_ret out number, v_temp in out number)
is
begin
  if(v_a > v_b) then
    v_ret := v_a;
  else
    v_ret := v_b;
  end if;
  v_temp := v_temp+1;
end;

在数据库中调用带参数的存储过程:

declare
  v_a number := 5;
  v_b number := 10;
  v_res number;
  v_temp number :=15;
begin
  p_test(v_a,v_b,v_res,v_temp);
  dbms_output.put_line(v_res);
  dbms_output.put_line(v_temp);
end;

但是,我们发现没有输出,只输出一个 匿名块功能执行完毕,这是因为我们没有打开serveroutput

set serveroutput on;

接下来,我们用程序去调用存储过程,通过jdbc连接oracle,顺便我们复习一下jdbc连接oracle的步骤,我把连接数据库的基本信息写在了配置文件中,放在了类路径下

注意这里还有一个知识点,就是程序加载配置文件的步骤

         private static Properties pp = null;
	private static InputStream fis= null;
	static {
		pp = new Properties();
		fis=CallProcedure.class.getClassLoader().getResourceAsStream("db.properties");
	          try {
			pp.load(fis);
		} catch (IOException e) {
			System.out.println("加载配置文件失败");
		}
		url = pp.getProperty("url");
		user = pp.getProperty("user");
		driver = pp.getProperty("driver");
		password = pp.getProperty("password");
	}



 

调用无参的存储过程:

package com.test.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
 * 调用无参的存储过程
 * @author 
 *jdk1.6和ojdbc7使用时会出现版本不兼容错误Unsupported major.minor version 51.0
 */
public class CallProcedure {
	private static Connection conn = null;
	private static CallableStatement cstmt = null;
	private static ResultSet rs = null;
	private static String url = "";
	private static String user = "";
	private static String driver = "";
	private static String password = "";
	private static Properties pp = null;
	private static InputStream fis= null;
	static {
		pp = new Properties();
		fis=CallProcedure.class.getClassLoader().getResourceAsStream("db.properties");
		try {
			pp.load(fis);
		} catch (IOException e) {
			System.out.println("加载配置文件失败");
		}
		url = pp.getProperty("url");
		user = pp.getProperty("user");
		driver = pp.getProperty("driver");
		password = pp.getProperty("password");
	}
	public static void main(String[] args) {
		try {
			//1.加载驱动
			Class.forName(driver);
			//2.创建连接
			conn = DriverManager.getConnection(url,user,password);
			//3.调用存储过程
			cstmt = conn.prepareCall("{call p}");
			//4.执行
			cstmt.executeUpdate();
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动失败");
		} catch (SQLException e) {
			System.out.println("连接失败");
		}finally{
			try {
				if(cstmt != null)
					cstmt.close();
				if(conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.println("cstmt关闭失败");
			}
		}
	}
}

调用有参的存储过程:注意,一定要设置out类型参数的类型,这里是java.sql.Types.INTEGER

package com.jiangtao.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.sun.xml.internal.ws.wsdl.writer.document.Types;
/**
 * 调用有参的存储过程
 * @author Administrator
 *jdk1.6和ojdbc7使用时会出现版本不兼容错误Unsupported major.minor version 51.0
 */
public class CallProcedure2 {
	private static Connection conn = null;
	private static CallableStatement cstmt = null;
	private static ResultSet rs = null;
	private static String url = "";
	private static String user = "";
	private static String driver = "";
	private static String password = "";
	private static Properties pp = null;
	private static InputStream fis= null;
	static {
		pp = new Properties();
		fis=CallProcedure2.class.getClassLoader().getResourceAsStream("db.properties");
		try {
			pp.load(fis);
		} catch (IOException e) {
			System.out.println("加载配置文件失败");
		}
		url = pp.getProperty("url");
		user = pp.getProperty("user");
		driver = pp.getProperty("driver");
		password = pp.getProperty("password");
	}
	public static void main(String[] args) {
		try {
			//1.加载驱动
			Class.forName(driver);
			//2.创建连接
			conn = DriverManager.getConnection(url,user,password);
			//3.调用存储过程
			cstmt = conn.prepareCall("{call p_test(?,?,?,?)}");
			//3.1设置out类型参数的具体类型
			cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
			cstmt.registerOutParameter(4, java.sql.Types.INTEGER);
			//3.2设置in参数
			cstmt.setInt(1, 5);
			cstmt.setInt(2,10);
			cstmt.setInt(4,10);
			//4.执行
			cstmt.execute();
			//注意:要输出的getXXX和上文3.1设置的类型要一致
			System.out.println(cstmt.getInt(3)+", "+cstmt.getInt(4));
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动失败");
		} catch (SQLException e) {
			System.out.println("连接失败");
		}finally{
			try {
				if(cstmt != null)
					cstmt.close();
				if(conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.println("cstmt关闭失败");
			}
		}
	}
}


 





 

java 调用存储过程 java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程 立即下载

相关推荐

EfficientNet中的MBConv模块详解:为什么它能如此高效?

本文深度解析了EfficientNet中的MBConv模块,详细介绍了其核心设计理念、效率优化技术和复合缩放理论。MBConv通过深度可分离卷积、倒残差结构和注意力机制三大关键技术,实现了计算效率与模型性能的平衡,成为高效网络结构设计的典范。

tcp8optimizer的博客 362

java代码中调用存储过程PROCEDURE以及函数Function

由于网络上这种方面的文章相对较少较乱,所以特别来写一篇。 一、新建存储过程 如下代码中,关键字说明: IN :表示入参 OUT:表示出参 RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。有关序列的创建,请自行搜索。 CREATE OR REPLACE PROCEDURE p_...

我弟是个程序员 2200

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

java存储过程 函数_java代码中调用存储过程PROCEDURE以及函数Function

由于网络上这种方面的文章相对较少较乱,所以特别来写一篇。一、java调用PROCEDURE1.1 新建存储过程如下代码中,关键字说明:IN :表示入参OUT:表示出参RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的idSEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。有关序列的创建,请自行搜索。CREATE OR REPLACE PRO...

weixin_30986517的博客 739

在线考试系统源码+数据库+word+ppt(高分毕业设计)

本系统通过Spring Cloud实现微服务拆分,将授权、考试、监控等功能解耦,既保证了系统的扩展性,也便于后期维护。基于OAuth2.0的单点登录,解决多服务统一认证问题;考试与练习模式分离,满足不同场景需求;集成Druid与Hystrix,保障系统监控与稳定性。

weixin_44355158的博客 738

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 367

说下 Oracle 中 function 和 procedure 的区别?思维导图 代码示例(java 架构)

函数适合封装那些需要返回单一值或表类型的简单计算和转换任务。存储过程则更适合封装复杂的业务逻辑,尤其是涉及到事务管理和批量操作的时候。如果你需要更详细的说明或者有关于如何更好地使用这些元素的问题,请告诉我!

qq_33240556的博客 770

MobSF-v3源代码分析(一)

移动安全框架(MobSF)是一种自动化的移动应用程序(Android/iOS/Windows)测试框架,能够执行静态、动态和恶意软件分析。 它可用于Android、iOS和Windows移动应用程序的有效和快速安全分析,并支持二进制文件(APK,IPA和APPX)和压缩源代码。 MobSF可以在运行时为Android应用程序进行动态应用程序测试,并具有由CapFuzz(一种特定于Web API的安全扫描程序)提供支持的Web API模糊测试。MobSF旨在使您的CI/CD或DevSecOps管道集成无缝。

武天旭的博客 8960

文章标题

JAVA 代码和Procedure 不是同一个事物场景1: 存储过程显式的提交事务,java代码发生异常,存储过程的事物不会回滚java 代码调用 oracle procedure 伪代码; procedure test_transaction asbegin insert into table value(2,’name2’); commit;

Go_forward的专栏 275

【Agent从入门到实践】40 容错优化:异常处理、重试机制、降级策略

各位小伙伴,咱们的多Agent框架一路优化到现在,决策快、执行效率高、资源用得省,看似啥都行,但只要一遇到网络波动、工具故障、数据异常调用web_search工具时网络超时,整个检索任务直接失败,写作Agent没数据可用向量库连接异常,向量检索直接崩掉,依赖检索结果的Agent全趴窝单个Agent执行出错,整个并行任务流程直接中断,前功尽弃高并发下部分工具调用失败,框架没有备用方案,只能返回任务失败说白了,咱们之前的框架只有正常执行逻辑,没有异常兜底逻辑。

人工智能AI技术 912

VisionTransformer改进(11):结合CoordAtt注意力机制

​​CoordAtt模块​​:一个轻量级的坐标注意力机制​​ViT模型​​:基于标准Vision Transformer架构,但集成了CoordAtt模块模型最终通过CNNModel函数封装,虽然名称是CNN,但实际上是一个Transformer模型。引入了轻量级的CoordAtt注意力机制,增强了模型对空间位置信息的捕捉能力保持了ViT的主要优势,同时通过注意力机制提升了特征表示能力设计简洁高效,适合作为基础模型进行进一步研究和应用。

2401_82355416的博客 701

Java中调用数据库存储过程

本文介绍了Java通过JDBC调用数据库存储过程的方法。存储过程是预编译的SQL语句集,具有性能高、网络流量少、安全性好和可复用性强等优点。文章详细讲解了Java调用存储过程的9个基本步骤,包括获取连接、创建CallableStatement对象、参数设置与获取等,并提供了4种典型示例:无参数存储过程调用、IN参数传递、OUT参数获取以及INOUT参数处理。通过具体代码展示了如何执行查询型存储过程、处理输入输出参数等常见场景,为开发者实现数据库业务逻辑提供实用参考。

shangjg3的博客 1678

【第2章>第10节】深度学习DenseNet模型分析与matlab仿真

本文介绍了基于DenseNet深度学习模型的图像分类MATLAB实现方法。主要内容包括:1. DenseNet模型原理,详细解析了初始卷积层、密集块、过渡层等核心结构;2. 在MATLAB环境下完成DenseNet工具箱安装和测试样本准备;3. 实现图像预处理(统一缩放为224×224)、模型训练和测试的完整流程;4. 提供了混淆矩阵和准确率等测试结果分析。文章附带完整的MATLAB程序代码和操作视频教程,适合深度学习初学者快速掌握DenseNet模型的图像分类应用。通过实际测试,验证了该方案的有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 330

MySQL存储过程(PROCEDURE)(二)

一、存储过程的修改:   语法:1 ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]   参数解释: Sp_name:表示存储过程或函数的名称 characteristic:表示要修改存储过程的哪个部分 Characteristic取值如下 CONTAINS SQL:表示子程序包含SQL语句,但是,不包含读或写数据的语句 NO...

weixin_34417200的博客 198

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2、MySQL创建存储过程(CREATE PROCEDURE)(函数)

MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。 编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。 下面主要介绍如何创建存储过程。 可以使用 CREATE PROCEDURE 语句创建存储过程,语法格式如下: CREATE PROCEDURE <过

you can you up up up的博客 5620

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

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

编辑mysql procedure_MySQL修改存储过程(ALTER PROCEDURE)

在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。MySQL 中修改存储过程的语法格式如下:ALTER PROCEDURE 存储过程名 [ 特征 ... ]特征指定了存储过程的特性,可能的取值有:CONTAINS SQL 表示子程序包含 SQL 语句...

weixin_39725885的博客 693

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL修改存储过程(ALTER PROCEDURE)

在实际开发过程中,业务需求修改的情况时有发生,这样,不可避免的需要修改 MySQL 中存储过程的特征 。

unber的博客 2883

存储过程 procedure

存储过程 procedure 代码开发注意事项: 1)基础要求:准确 完整 规范 2)加强要求:思路清晰 基本框架: create procedure 存储过程名称 is begin null; --具体要执行的脚本 end ; –丰富一下 create or replace procedure 存储过程名称 --第一次创建是create procedure,后续修改就用create or replace procedure ( 输入参数名称 in 类型, --统计日期/统计月份

朝和 1221

mysql重新编译存储过程_MySQL修改存储过程(ALTER PROCEDURE)

在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。MySQL 中修改存储过程的语法格式如下:ALTER PROCEDURE 存储过程名 [ 特征 ... ]特征指定了存储过程的特性,可能的取值有:CONTAINS SQL 表示子程序包含 SQL 语句...

weixin_33060757的博客 989

mysql建立存储过程报错_MySQL创建存储过程(CREATE PROCEDURE)

MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。下面主要介绍如何创建存储过程。可以使用 CRE...

weixin_30220993的博客 1042

第17节-存储过程-Drop-procedure

本教程介绍了如何使用PostgreSQL的DROP PROCEDURE语句删除存储过程。内容包括:语法说明(含IF EXISTS、参数列表、CASCADE/RESTRICT选项)、多过程删除方法,以及通过创建/删除示例存储过程(add_brand、increase_inventory、receive_product)演示具体操作。重点指出PostgreSQL不跟踪过程间依赖关系,删除被调用的过程会导致调用过程执行失败。摘要总结了删除存储过程的核心要点和注意事项。

知识的力量 535

mysql怎么改存储过程uft8_MySQL修改存储过程(ALTER PROCEDURE)

MySQL修改存储过程(ALTER PROCEDURE)在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。MySQL 中修改存储过程的语法格式如下:ALTER PROCEDURE 存储过程名 [ 特征 ... ]特征指定了存储过程的特性,可能的取值有...

weixin_30878111的博客 263

SAP HANA中的存储过程(sql procedure)

语法: CREATE PROCEDURE {schema.}name {({IN|OUT|INOUT}                                  param_name data_type {,...})}       {LANGUAGE &lt;LANG&gt;} {SQL SECURITY &lt;MODE&gt;}       {READS SQ...

weixin_33859665的博客 198

sql procedure 存储过程入门

转自百度百科 http://baike.baidu.com/view/1031973.htm CREATE PROCEDURE 创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Mi...

weixin_33962923的博客 438

Oracle Procedure 存储过程

Oracle/PLSQL: Creating Procedures: [url]http://www.techonthenet.com/oracle/procedures.php[/url][quote]The syntax for a procedure is: [code="sql"]CREATE [OR REPLACE] PROCEDURE procedure_name [ (...

Wuaner的博客 92
上一篇: 我的自学之路
下一篇: 运算符优先级口诀,偶然间看到的 分享
Java_Soldier
博客等级 码龄10年 27粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值