在 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
来调用包中的存储过程,并指定输入参数 10
和 20
,以及输出参数 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