通过JAVA调用存储过程请看最下方!!
首先肯定要知道的,最基础的一个Oracle无参存储过程的创建语句是必要的
-- 无参
-- 创建语句 OR REPLACE 表示如果有TEST_优快云的存储过程已经存在就覆盖掉
CREATE OR REPLACE PROCEDURE TEST_优快云
BEGIN
-- 执行过程
END;
无参的没什么好说的,下面我主要结合有参的给你们解疑答惑,比较适合刚接触Oracle存储过程,看别人的存储过程,一些疑惑的地方,我在下面都会给你一一讲到。
开搞!
有参创建存储过程
参数讲解:
- IN 定义一个输入参数变量,用于传递参数给存储过程
- OUT 定义一个输出参数变量,用于从存储过程获取数据
- IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
-- 有参
-- IN 传参 OUT 出参 IN OUT 出入参皆有 AS后面跟申明
CREATE OR REPLACE PROCEDURE TEST_优快云(I_UUID IN STUDENT.UUID%TYPE) AS
-- 定义一个类型是STUDENT表里面的NAME字段的变量V_NAME
V_NAME STUDENT.NAME%TYPE;
V_AGE STUDENT.AGE%TYPE;
BEGIN
-- 执行过程
END;
1、AS 用作申明,也可以用IS
2、I_UUID IN STUDENT.UUID%TYPE
定义一个传参I_UUID,类型就是STUDENT表中的UUID字段类型,可以理解吧
3、V_NAME STUDENT.NAME%TYPE;
那这个应该不用说了吧?和上面的一样,定义一个变量,类型就是STUDENT表中的NAME字段类型
结合有参写执行过程
CREATE OR REPLACE PROCEDURE TEST_优快云(I_UUID IN STUDENT.UUID%TYPE) AS
V_NAME STUDENT.NAME%TYPE;
V_AGE STUDENT.AGE%TYPE;
BEGIN
-- 执行过程
SELECT NAME,AGE INTO V_NAME,V_AGE FROM STUDENT WHERE UUID = I_UUID;
DBMS_OUTPUT.PUT_LINE(V_NAME || '_' || V_AGE);
END;
首先看执行过程第一句
一个最基础的SQL,怕你们都是大写的看着费劲,我在这里翻译一下,哈哈哈哈哈哈哈,笑死
查询student表中的name和age字段,将查出来的这两个字段的值赋值给V_NMAE和V_AGE这两个变量中,查询条件就是student表中的uuid字段要等于传参的I_UUID
DBMS_OUTPUT.PUT_LINE和 || 符号
DBMS_OUTPUT.PUT_LINE是一个输出打印语句,然后 || 符号就是拼接符号
输入输出参数
下面就是输入输出参数都有的类型了,我直接把上面的代码复制一下,进行一个小的修改,也是比较简单的一个示例
通常有输入和输出参数的话,一般是用于第三方,比如输出到java
下面这段代码看上去是不是比较简单?好了,我知道你们看不懂,还是给你们翻译一下吧,嘿嘿
-- 添加了一个输出参数 I_NAME
CREATE OR REPLACE PROCEDURE TEST_优快云(I_UUID IN STUDENT.UUID%TYPE,I_NAME OUT STUDENT%TYPE)
-- 去除了声明变量
BEGIN
-- 执行过程
SELECT NAME INTO I_NAME FROM STUDENT WHERE UUID = I_UUID;
-- 去除了打印语句
END;
上述代码,添加了一个输出字段(OUT)I_NAME,在STUDENT表中查询NAME,条件还是一样的,然后将NMAE的值赋值给输出参数I_NAME。
怎么调用开启存储过程?
这里,你可以下一个PLSQL,在这里面,会有一个Test script,然后你把要执行的存储过程写在BEGIN和END的中间,点击执行
里面的样子,给你们显示在下面的代码中
可别忘了TEST_优快云是什么东西了,就是我们刚刚写的存储过程啊
DECLARE
-- 声明变量接收存储过程中的输出参数
I_NAME STUDENT.NAME%TYPE;
BEGIN
-- 对存储过程TEST_优快云进行赋值和定义输出参数
TEST_优快云(888,I_NAME);
-- 进行打印
DBMS_OUTPUT.PUT_LINE(I_NAME);
END;
最最最重要的一步
在java中调用存储过程
首先你可以在网上下载一个ojdbc6.jar或者ojdbc8.jar,个人建议ojdbc8.jar
其次就请看下面的测试代码,步骤和你不清楚的地方都写在代码的注释中
public class TestCsdn {
public static void main(String[] args) throws Exception {
//"oracle.jdbc.driver.OracleDriver"就是ojdbc8.jar里面的
//1.通过反射加载驱动,这里会有异常直接给他抛出就完事
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获取连接对象
//@localhost 连接地址
//1521 端口号
//csdn 数据库名称
String url = "jdbc:oracle:thin:@localhost:1521:csdn";
//用户名
String user = "user";
//密码
String password = "password";
//连接对象
Connection conn = DriverManager.getConnection(url,user,password);
//3.获得语句对象
//call TEST_优快云(?,?)对应的存储过程
String sql = "{call TEST_优快云(?,?)}";
CallableStatement call = conn.prepareCall(sql);
//4.设置输入参数
//很多人可能不知道1是什么意思,首先这个参数的下标是从1开始的
//2个参数,1代表第一个参数,2代表第2个参数
//这里相当于给第一个参数传参的值设置为888
call.setInt(1,888);
//5.注册输出参数,这是必须要的,第二个参数类型在oracle中是什么,就写什么
call.registerOutParameter(2,OracleTypes.DOUBLE);
//6.执行存储过程
call.execute();
//7.获取输出参数
double age = call.getDouble(2);
System.out.println(age);
//8.释放资源
call.close();
conn.close();
}
}