首页 > 数据库 >Oracle存储过程 Call使用

Oracle存储过程 Call使用

时间:2023-03-02 17:12:50浏览次数:41  
标签:存储 package NUMBER stmt add Call result Oracle my

在 Oracle 中,可以将存储过程(PROCEDURE)定义在一个包(PACKAGE)中。

要调用包中的存储过程,需要使用包名和存储过程名来引用它们。以下是一个示例:

假设我们有一个名为 my_package 的包,其中包含一个名为 add_numbers 的存储过程,用于将两个数字相加。存储过程定义如下:

CREATE OR REPLACE PACKAGE my_package AS
  PROCEDURE add_numbers(num1 IN NUMBER, num2 IN NUMBER, sum OUT NUMBER);
END my_package;

CREATE OR REPLACE PACKAGE BODY my_package AS
  PROCEDURE add_numbers(num1 IN NUMBER, num2 IN NUMBER, sum OUT NUMBER) AS
  BEGIN
    sum := num1 + num2;
  END add_numbers;
END my_package;

要调用包中的存储过程,需要使用以下语法:

DECLARE
  result NUMBER;
BEGIN
  my_package.add_numbers(10, 20, result);
  DBMS_OUTPUT.PUT_LINE(result);
END;
在上面的示例中,我们首先使用 DECLARE 语句定义一个名为 result 的变量。然后,我们使用 my_package.add_numbers 来调用包中的存储过程,并指定输入参数 1020,以及输出参数 result。最后,我们使用 DBMS_OUTPUT.PUT_LINE 函数在控制台上输出结果。如果一切顺利,我们将在控制台上看到输出结果为 30。注意,此示例中使用的 DBMS_OUTPUT.PUT_LINE 函数用于输出结果到控制台,但在某些情况下,可能需要根据具体情况进行修改。   Java使用CallableStream调用
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

public class Example {
    public static void main(String[] args) {
        try {
            // 1. 创建数据库连接
            String url = "jdbc:mysql://localhost:3306/mydatabase";
            String username = "root";
            String password = "mypassword";
            Connection conn = DriverManager.getConnection(url, username, password);

            // 2. 创建 CallableStatement 对象
            String sql = "{call my_package.add_numbers(?, ?, ?)}";
            CallableStatement stmt = conn.prepareCall(sql);

            // 3. 设置输入参数
            int param1 = 10;
            int param2 = 20;
            stmt.setInt(1, param1);
            stmt.setInt(2, param2);

            // 4. 注册输出参数
            stmt.registerOutParameter(3, Types.INTEGER);

            // 5. 执行存储过程
            stmt.execute();

            // 6. 获取输出参数
            int result = stmt.getInt(3);
            System.out.println("Result: " + result);

            // 7. 关闭连接和语句
            stmt.close();
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

 

 

标签:存储,package,NUMBER,stmt,add,Call,result,Oracle,my
From: https://www.cnblogs.com/xin-xing/p/17172426.html

相关文章

  • 计算机存储的最小单位是字节byte,不是位bit
     51单片机是8位的寄存器,汇编指令一次最小处理8位,也就是一个字节,不管是内存还是外存。内存、磁盘容量都是以多少字节为单位,没听说过多少个位的磁盘。磁盘的读写以字节......
  • KingbaseES 的oracle兼容性参数
    KingbaseES用户可通过设置相关的数据库兼容参数,部分或全部启用Oracle兼容特性。常用的兼容性参数有以下这些:参数名称参数说明ora_forbid_func_polymorphism是......
  • MySQL进阶—存储引擎
    存储引擎存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方法。其基于表的,而不是基于库的,所以存储引擎也称为表类型。在建表的时候,不指定存储引擎的话,就会使用......
  • 存储系列之 硬盘接口与SCSI总线协议
    本文主要介绍硬盘的接口、总线和协议,SSD与SATA硬盘一般是兼容的,NVmeSSD除外。 一、磁盘控制器上一章介绍了存储系统的主要介质硬盘,而硬盘的读写通过磁头臂,磁头臂是由磁......
  • 存储过程块与事务控制
    KingbaseES的存储过程内的事务默认与外部调用者的事务是合并在一起的:存储过程内部的提交或回退会影响外部事务,而外部事务的提交或回退也会影响存储过程内部的事务。可以通......
  • Tf2 ValueError: A merge layer should be called on a list of inputs
    Tf2ValueError:Amergelayershouldbecalledonalistofinputs问题描述最近遇到了一个tensorflow的问题,在load已经save下来的模型的时候,发生了报错:/opt/conda/l......
  • 麒麟kylin-server-v10-sp2安装oracle11g
    envkylin-server-v10-sp24.19.90-24.4.v2101.ky10.x86_642c4goracle11g-2.0.4toolsp13390677_112040_Linux-x86-64_1of7.zipp13390677_112040_Linux-x86-64_2of......
  • ubuntu 安装php7.2 oracle扩展
    一:介绍php要连接访问oracle需要安装三个东西1:OracleInstantClient:即时客户端库2:php的Oracle数据库扩展:oci83:php连接pdo的oci扩展:pdo_oci原理:oci8提供php驱动,封装方......
  • VMware vSphere挂载NAS存储
    今天在VMware下挂载NAS存储一,先在isilon下新建NFS详细查看之前的教程,isilon节点运行状态查看和挂载NAS盘,https://www.cnblogs.com/yisheng163/p/16446116.html二,新建数......
  • Oracle 面试宝典-DG篇
    Oracle面试宝典-DG篇IT小Chen2021-07-261744 一:请描述Oracle Data Guard优点有哪些;二:请描述DG备库类型和特点;三:请描述如何将物理备用数据库转换为快照......