• oracle的学存储过程和函数的调用


    调用存储过程或者函数

    package com.itheima.test;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    
    import org.junit.Test;
    
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.driver.OracleTypes;
    
    public class TestProcedure {
    	
    	/*
    	 * create or replace procedure proc_getyearsal(eno in number,vyearsal out number)
    		is  
    		begin
    		  -- 查询员工年薪
    		  select sal*12 + nvl(comm,0) into vyearsal from emp where empno = eno; 
    		end;
    	 * */
    	@Test
    	public void test1() throws Exception{
    //		1.注册驱动
    		Class.forName("oracle.jdbc.driver.OracleDriver");
    //        2.创建连接
    		String url ="jdbc:oracle:thin:@192.168.80.100:1521:orcl";
    		Connection conn = DriverManager.getConnection(url, "xidada", "root");
    //        3.获取执行SQL的对象
    		String sql ="{call pro_updatesal(?,?)}";
    		CallableStatement call = conn.prepareCall(sql);
    //		  封装参数
    		call.setInt(1, 7369);
    //		注册输出类型的参数
    		call.registerOutParameter(2, OracleTypes.NUMBER);
    //        4.执行SQL
    		call.execute();  // 如果执行的是查询拆操作就返回true , 增删改的操作就是false
    //        5.处理结果
    		int sum = call.getInt(2);
    		System.out.println("年薪:"+sum);
    //        6.释放资源
    		call.close();
    		conn.close();
    	}
    	
    	@Test
    	/*
    	 * create or replace procedure proc_getemp(dno in number,vrows out sys_refcursor)
    		is
    		       
    		begin
    		  open vrows for select * from emp where deptno = dno;
    		end;
    	 * */
    	public void test2() throws Exception{
    //		1.注册驱动
    		Class.forName("oracle.jdbc.driver.OracleDriver");
    //        2.创建连接
    		String url ="jdbc:oracle:thin:@192.168.42.100:1521:orcl";
    		Connection conn = DriverManager.getConnection(url, "xidada", "root");
    //        3.获取执行SQL的对象
    		String sql ="{call proc_getemp(?,?)}";
    		CallableStatement call = conn.prepareCall(sql);
    //		4.封装输入类型的参数
    		call.setInt(1, 10);
    //		5.注册输出类型的参数
    		call.registerOutParameter(2, OracleTypes.CURSOR);
    //		6.执行SQL
    		call.execute();
    //		7.处理结果
    		System.out.println(call.getClass().getName());
    		OracleCallableStatement call2 = (OracleCallableStatement)call;
    		ResultSet rs = call2.getCursor(2);
    		while(rs.next()){
    			System.out.println(rs.getObject("empno"));
    			System.out.println(rs.getObject("ename"));
    			System.out.println(rs.getObject("job"));
    			System.out.println(rs.getObject("sal"));
    			System.out.println("==================================");
    		}
    //		8.释放资源
    		rs.close();
    		call2.close();
    		conn.close();
    	}
    	
    	
    	
    }
    

     存储函数和过程在oracle中调用

    -- 存储过程调用
    call proc_updatesal(7369,10)
    
    -- 方式2:
    declare
    
    begin
      proc_updatesal(7369,-10);
    end;
    
    ---存储函数调用,和oracle中一般函数一样
    
    -- 调用函数
    declare
      vsum number;
    begin
      vsum := func_getyearsal(7369);
      dbms_output.put_line('年薪:'||vsum);
    end;
    
    
    select func_getyearsal(empno) from emp;
    

      

  • 相关阅读:
    保险
    cron表达式的用法
    Hive 学习记录
    股票的五种估值方法
    AtCoder Beginner Contest 113 A
    ZOJ 4070 Function and Function
    银行业务队列简单模拟 (数据结构题目)
    算法3-7:银行排队
    算法3-5:n阶Hanoi塔问题
    算法3-1:八进制数
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/9343513.html
Copyright © 2020-2023  润新知