(上)Oracle存储过程,你想要找的基本都有

本文详细介绍了如何在Java中通过Oracle JDBC调用存储过程,包括无参和有参存储过程的创建,参数类型(IN、OUT、IN OUT),以及输入输出参数的使用示例。并提供了实际的PL/SQL和Java代码示例,帮助初学者理解存储过程调用过程。
摘要由CSDN通过智能技术生成

通过JAVA调用存储过程请看最下方!!

首先肯定要知道的,最基础的一个Oracle无参存储过程的创建语句是必要的

-- 无参
-- 创建语句 OR REPLACE 表示如果有TEST_CSDN的存储过程已经存在就覆盖掉
CREATE OR REPLACE PROCEDURE TEST_CSDN
BEGIN
-- 执行过程
END;

无参的没什么好说的,下面我主要结合有参的给你们解疑答惑,比较适合刚接触Oracle存储过程,看别人的存储过程,一些疑惑的地方,我在下面都会给你一一讲到。

开搞!

有参创建存储过程

参数讲解:

  1. IN 定义一个输入参数变量,用于传递参数给存储过程
  2. OUT 定义一个输出参数变量,用于从存储过程获取数据
  3. IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
-- 有参
-- IN 传参  OUT 出参 IN OUT 出入参皆有    AS后面跟申明
CREATE OR REPLACE PROCEDURE TEST_CSDN(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_CSDN(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_CSDN(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_CSDN是什么东西了,就是我们刚刚写的存储过程啊

DECLARE
-- 声明变量接收存储过程中的输出参数
    I_NAME STUDENT.NAME%TYPE;

BEGIN
-- 对存储过程TEST_CSDN进行赋值和定义输出参数
    TEST_CSDN(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_CSDN(?,?)对应的存储过程
        String sql = "{call TEST_CSDN(?,?)}";
        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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值