`
java-lxm
  • 浏览: 37764 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle存储过程学习

 
阅读更多
oracle处于入门,看了些例子,写了几个简单的存储过程,记着
表结构
create table t_test_procedure
(
       t_id  number primary key,
       t_name varchar2(255) not null,
       t_remark varchar2(20)     
);

java工具类:
package com.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DB {

	private final static String DRIVER = "oracle.jdbc.driver.OracleDriver";
	
	private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
	
	private final static String USERNAME = "XXX";
	
	private final static String PWD = "XXX";
	
	static {
		
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}
	}
	
	public static Connection getConn(){
		
		Connection conn =  null;
		
		try {
			conn = DriverManager.getConnection(URL, USERNAME, PWD);
			System.out.println("successed");
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return conn;
	}
	public static void closeConn(Connection conn){
		
		if(conn != null) {
			
			try {
				conn.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		getConn();
	}
}


------------------------------
1.无返回值的
create or replace procedure pro_insert(
       v_id      in number,
       v_name in varchar2,
       v_remark in varchar2
)is 
    sys_exception exception;
begin

     insert into t_test_procedure(t_id,t_name,t_remark) values(v_id,v_name,v_remark);
     
     exception
              when others then 
                   rollback;
                return;   
end pro_insert;

-------------------------------------
2.有返回值的
create or replace procedure pro_my_procedure(
                  v_name      in varchar2,
                  v1_name    in varchar2,
                  s_save      out varchar2,
                  s_update   out varchar2
)is
 sys_exception exception;
 db_exception  exception;
 begin 
       select count(*) into s_save from t_test_procedure t where t.t_remark = 'save' and t.t_name = v_name;
       select count(*) into s_update from t_test_procedure t where t.t_remark = 'update' and t.t_name = v1_name;
       
  exception
           when others then 
                rollback;
             return;
  end pro_my_procedure;

--------------------------------------------
3.返回结果集的,先建包
create or replace package mypackage as
       type test_cursor is ref cursor;
end mypackage;

然后存储过程,以游标作为out参数
create or replace procedure pro_queryall
(        p_cursor out  mypackage.test_cursor
)is
begin 
  open p_cursor for select * from t_test_procedure;
end pro_queryall;

---------------------------------------------------
4.java类调用
package com.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.OracleTypes;

import com.utils.DB;

public class Test {

	//无返回结果
	public static void insert() {
		
		Connection conn = DB.getConn();
		
		CallableStatement cs = null;
		
		String sql = "{Call pro_insert(?,?,?)}";
		
		try {
			
			cs = conn.prepareCall(sql);
			cs.setInt(1, 5);
			cs.setString(2, "wang");
			cs.setString(3, "save");
			cs.execute();
			System.out.println("success");
			
		} catch (SQLException e) {
			
			System.err.println("sql 异常");
			
			e.printStackTrace();

		}finally{
			DB.closeConn(conn);
		}
	}
	
	//有结果集的返回(带输出参数的返回)
	public static List<String> query() {
		
		List<String> list = new ArrayList<String>();
		
		Connection conn = DB.getConn();
		
		CallableStatement cs = null;
		
		String sql = "{Call pro_my_procedure(?,?,?,?)}";
		
		try {
			
			cs = conn.prepareCall(sql);
			cs.setString(1, "wang");
			cs.setString(2, "lisi");
			
			cs.registerOutParameter(3, Types.VARCHAR);
			cs.registerOutParameter(4, Types.VARCHAR);
			
			cs.execute();
			
			String s1 = cs.getString(3);
			String s2 = cs.getString(4);
			
			list.add(s1);
			list.add(s2);
			
			System.out.println("success");
			
		} catch (SQLException e) {
			
			System.err.println("sql 异常");
			
			e.printStackTrace();

		}finally{
			DB.closeConn(conn);
		}
		return list;
	}
	
	//返回结果集
	public static List<String> queryAll() {
		
		List<String> list = new ArrayList<String>();
		
		Connection conn = DB.getConn();
		
		CallableStatement cs = null;
		
		ResultSet rs = null;
		
		String sql = "{Call pro_queryall(?)}";
		
		try {
			
			cs = conn.prepareCall(sql);
		
			cs.registerOutParameter(1, OracleTypes.CURSOR);
			
			cs.execute();
			
			rs = (ResultSet) cs.getObject(1);
			
			while(rs.next()){
				System.out.println("编号: "+rs.getLong(1) + "姓名: " + rs.getString(2)+ " 操作:" +  rs.getString(3));
				String s0 = String.valueOf(rs.getLong(1));
				String s1 = rs.getString(2);
				String s2 = rs.getString(3);
				list.add(s0);
				list.add(s1);
				list.add(s2);
			}
			
		} catch (SQLException e) {
			
			System.err.println("sql 异常");
			
			e.printStackTrace();

		}finally{
			DB.closeConn(conn);
		}
		return list;
	}
	
	
	public static void main(String[] args) {
		insert();
		List<String> list = query();
		for(String s:list) {
			System.out.println(s+"------------");
		}
		
		List<String> list_01 = queryAll();
		for(String s:list_01) {
			System.out.println(s+"=======");
		}
	}
}
分享到:
评论

相关推荐

    oracle存储过程学习经典入门

    Oracle 存储过程学习经典入门 Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识...

    ORACLE存储过程学习

    ### ORACLE存储过程学习知识点详解 #### 一、存储过程概述 存储过程是数据库中预编译好的一组SQL语句,它可以实现复杂的数据处理逻辑,提高应用开发效率,并且能够增强应用程序的安全性。Oracle存储过程使用PL/SQL...

    ORACLE存储过程学习源码

    这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...

    oracle存储过程学习经典

    ### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...

    oracle存储过程学习经典[语法+实例+调用].doc

    ### Oracle存储过程学习经典知识点详解 #### Oracle存储过程概述与基础知识 存储过程是数据库中预编译的一系列SQL和PL/SQL语句的集合,它提供了执行复杂操作的能力,如事务处理、数据处理和错误处理。Oracle存储...

    oracle存储过程学习经典(实例)

    这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何创建、执行和管理存储过程。 存储过程在数据库管理中扮演着关键角色,它可以提升系统的性能,通过减少网络流量和提供预编译的...

    oracle 存储过程学习经典

    ### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 - **定义**: 存储过程是在数据库中预编译并存储的一段SQL或PL/SQL代码块,它可以包含复杂的逻辑处理,用于实现特定的功能。存储过程提高了代码...

    oracle存储过程学习经典[语法+实例+调用]

    ### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 **存储过程**是在数据库中预先定义并编译好的一系列SQL语句或PL/SQL代码块,它可以接受输入参数,输出参数,并能实现复杂的业务逻辑处理。通过...

    Oracle 存储过程学习文档

    ### Oracle存储过程学习文档知识点详解 #### 一、Oracle存储过程概述 **1.1 存储过程定义:** Oracle存储过程是一种存储在数据库中的PL/SQL代码块,它可以接收输入参数并返回输出参数。存储过程能够执行复杂的业务...

    oracle存储过程学习经典[语法+实例+调用].pdf

    ### Oracle存储过程学习经典知识点详解 #### 一、创建存储过程 存储过程是数据库中预编译的一段SQL代码,可以提高程序的可维护性和执行效率。在Oracle中,可以通过`CREATE OR REPLACE PROCEDURE`语句来创建存储过程...

    oracle存储过程学习资料

    在本学习资料中,你将深入理解Oracle存储过程的创建、调用、调试以及优化等多个方面。 1. **存储过程的创建**: Oracle存储过程通过`CREATE PROCEDURE`语句来定义。你可以指定输入参数、输出参数、输入输出参数,...

    oracle 存储过程学习总结

    Oracle存储过程学习总结涵盖了Oracle中存储过程的编写与应用,涉及到字符串处理、游标使用、PL/SQL编程等方面的知识点。 首先,字符串处理是存储过程中常见的操作。文章中提到了多个内置函数,如CONCAT用于连接字符...

    oracle存储过程学习笔记(四)

    在本篇“Oracle存储过程学习笔记(四)”中,我们将深入探讨存储过程的概念、创建、执行以及在实际应用中的优势。 1. **存储过程的概念** 存储过程是一组预先编译的SQL和PL/SQL语句,存储在数据库服务器中。当需要...

    oracle存储过程学习实例文档 创建调用

    在这个“Oracle存储过程学习实例文档”中,我们将深入探讨如何创建存储过程,以及如何在Java应用程序中调用这些过程。 1. **创建Oracle存储过程** 创建存储过程的基本语法如下: ```sql CREATE OR REPLACE ...

    oracle存储过程学习笔记

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字

    oracle存储过程学习经典入门.rar_oracle

    这个压缩包文件"oracle存储过程学习经典入门.rar_oracle"显然包含了帮助初学者理解并掌握Oracle存储过程的基础教程。下面将详细讲解Oracle存储过程的相关知识点。 首先,存储过程是预编译的SQL语句集合,它在数据库...

Global site tag (gtag.js) - Google Analytics