OracleSQL存储函数和存储过程及Java调用

存储过程是将编译好的PLSQL代码片段存储在数据库中:

                                            1.提高了业务逻辑的执行效率  2.将复杂的逻辑的逻辑封装成了一个过程

语法:create or repalce procedure 过程名称

as 

声明部分

begin

      -   -业务逻辑

end;

打印语句:dbms_output.put_line(    )     字符串的连接用‘||’

输入参数用in     输出参数用out

---------------------------------------------------------------------------------------------------

存储函数 

格式为:

    create or repalce function 函数名(参数...)

    return 数据类型

    as

    begin

     end;

存储函数与存储过程的区别:

1.函数一定要有返回值:在开头要声明返回值的类型

2.封装好的函数可以在SQL语句中使用,存储过程不可以

3.函数存在的意义是给过程调用。在工作中调用的通常是过程

4.函数和过程本质上没有什么区别

存储过程在Java中的调用:

例如:在Oracle数据库中创建一个pro_query查询过程,根据工作号查询员工的姓名、工作、工资

    create or repalce procedure pro_query(eno in number,name out varchar,qjob out varchar,qsal out varchar)

    begin

          select ename,job,sal into name,job,sal from emp where empno=eno; 

   end;

java中 调用过程:

    加载驱动 连接数据库    通过数据连接.prepareCall(sql)创建CallableStatement对象.

    包装数入参数call.set()

    注册输出参数registerOutParameter(      , OracleTypes.      );

    执行call.execute()

    获取数据

    call.get()

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.internal.OracleTypes;
/*
 * 存储过程的调用
 * --创建一个存储过程,通过输入的员工号数出,员工姓名,工作还有工资
 * */
public class practice {
	public static void main(String[] args) {
		Connection conn=null;
		CallableStatement call=null;
		try {
			//加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//连接数据库
			conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott","123456");
			//创建callablestatement
			String sql="call pro_query(?,?,?,?)";
			call=conn.prepareCall(sql);
			//封装参数
			call.setInt(1, 7499);
			//注册输出参数
			call.registerOutParameter(2, OracleTypes.VARCHAR);
			call.registerOutParameter(3,OracleTypes.VARCHAR);
			call.registerOutParameter(4, OracleTypes.NUMBER);
			//执行,此处的返回的类型为boolean类型,可根据此处判断是否执行成功
			call.execute();
			String name=call.getString(2);
			String job=call.getString(3);
			int sal=call.getInt(4);
			System.out.println("ename="+name);
			System.out.println("job="+job);
			System.out.println("sal="+sal);
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动失败!");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("连接数据库失败!");
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36055407/article/details/81709267