oracle存储过程调用java代码

Oracle 存储过程调用 Java 有时候,我们可能需要在存储过程中调用 Java 代码,以便利用 Java 的强大功能来完成更复杂的操作。在存储过程中调用 Java 方法之前,我们需要在 Oracle 数据库中创建一个 Java 类型。接着,我们在 Oracle 数据库中创建了一个 Java 类型,使其可供存储过程调用。现在,我们可以在 Oracle 数据库中调用这个存储过程,以触发 Java 代码的执行。首先,我们需要创建一个 Java 类,其中包含我们希望在存储过程中调用的方法。在这个示例中,我们创建了一个名为。 阅读详情

 一、如何创建java存储过程?
通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile java source named "<name>" as
       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

SQL> create or replace and compile java source named "javademo1"
  2  as
  3  import java.sql.*;
  4  public class JavaDemo1
  5  {
  6  public static void main(String[] argv)
  7  {
  8  System.out.println("hello, java demo1");
  9  }
 10  }
 11  /

Java 已创建。

SQL> show errors java source "javademo1"
没有错误。

SQL> create or replace procedure javademo1
  2  as
  3  language java name ''JavaDemo1.main(java.lang.String[])'';
  4  /

过程已创建。

SQL> set serveroutput on
SQL> call javademo1();

调用完成。

SQL> call dbms_java.set_output(5000);

调用完成。

SQL> call javademo1();
hello, java demo1

调用完成。

SQL> call javademo1();
hello, java demo1
调用完成。
2. 使用外部class文件来装载创建
e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。


public class OracleJavaProc
{
    public static void main(String[] argv)
    {
        System.out.println("It''s a Java Oracle procedure.");
    }
}


SQL> grant create any directory to scott;

授权成功。

SQL> conn scott/tiger@iihero.oracledb
已连接。
SQL> create or   replace   directory   test_dir   as  ''d:/oracle'';

目录已创建。

SQL> create or replace java class using bfile(test_dir, ''OracleJavaProc.CLASS'')
  2  /

Java 已创建。

SQL> create or replace procedure testjavaproc as language java name ''OracleJavaProc.main(java.lang.String[])'';
  2  /

过程已创建。

SQL> call testjavaproc();

调用完成。

SQL> execute testjavaproc;

PL/SQL 过程已成功完成。

SQL> set serveroutput on size 5000
SQL> call dbms_java.set_output(5000);

调用完成。

SQL> execute testjavaproc;
It''s a Java Oracle procedure.
3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
    先创建一个类, e.g.


import java.sql.*;
import oracle.jdbc.*;

public class OracleJavaProc ...{

   //Add a salgrade to the database.
   public static void addSalGrade(int grade, int losal, int hisal) ...{

      System.out.println("Creating new salgrade for EMPLOYEE...");

      try ...{
         Connection conn =
            DriverManager.getConnection("jdbc:default:connection:");

         String sql =
            "INSERT INTO salgrade " +
            "(GRADE,LOSAL,HISAL) " +
            "VALUES(?,?,?)";
         PreparedStatement pstmt = conn.prepareStatement(sql);
         pstmt.setInt(1,grade);
         pstmt.setInt(2,losal);
         pstmt.setInt(3,hisal);
         pstmt.executeUpdate();
         pstmt.close();
         }
      catch(SQLException e) ...{
         System.err.println("ERROR! Adding Salgrade: "
           + e.getMessage());
         }
   }
}
使用loadjava命令将其装载到服务器端并编译:


D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or
acleJavaProc.java
arguments: ''-u'' ''scott/tiger@iihero.oracledb ''-v'' ''-resolve'' ''OracleJavaProc.java''
creating : source OracleJavaProc
loading  : source OracleJavaProc
resolving: source OracleJavaProc
查询一下状态:


连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE ''JAVA%'';

OBJECT_NAME
--------------------------------------------------------------------------------

OBJECT_TYPE                          STATUS
------------------------------------ --------------
OracleJavaProc
JAVA CLASS                           VALID

OracleJavaProc
JAVA SOURCE                          VALID
测试一下存储过程:


SQL> create or replace procedure add_salgrade(id number, losal number, hisal num
ber) as language java name ''OracleJavaProc.addSalGrade(int, int, int)'';
  2  /

过程已创建。

SQL> set serveroutput on size 2000
SQL> call dbms_java.set_output(2000);

调用完成。

SQL> execute add_salgrade(6, 10000, 15000);
Creating new salgrade for EMPLOYEE...

PL/SQL 过程已成功完成。

SQL> select * from salgrade where grade=6;

     GRADE      LOSAL      HISAL
---------- ---------- ----------
         6      10000      15000
 

二、如何更新你已经编写的java存储过程? 

假如要往类OracleJavaProc里添加一个存储过程方法,如何开发?
正确的步骤应该是先dropjava, 改程序,再loadjava。

e.g.修改OracleJavaProc类内容如下:


import java.sql.*;
import oracle.jdbc.*;

public class OracleJavaProc ...{

   // Add a salgrade to the database.
   public static void addSalGrade(int grade, int losal, int hisal) ...{

      System.out.println("Creating new salgrade for EMPLOYEE...");

      try ...{
         Connection conn =
            DriverManager.getConnection("jdbc:default:connection:");

         String sql =
            "INSERT INTO salgrade " +
            "(GRADE,LOSAL,HISAL) " +
            "VALUES(?,?,?)";
         PreparedStatement pstmt = conn.prepareStatement(sql);
         pstmt.setInt(1,grade);
         pstmt.setInt(2,losal);
         pstmt.setInt(3,hisal);
         pstmt.executeUpdate();
         pstmt.close();
         }
      catch(SQLException e) ...{
         System.err.println("ERROR! Adding Salgrade: "
           + e.getMessage());
         }
   }
  
   public static int getHiSal(int grade)
   ...{
    try ...{
        Connection conn =
          DriverManager.getConnection("jdbc:default:connection:");
        String sql = "SELECT hisal FROM salgrade WHERE grade = ?";
        PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);
        ResultSet rset = pstmt.executeQuery();
        int res = 0;
        if (rset.next())
        ...{
            res = rset.getInt(1);
        }
        rset.close();
        return res;
       }
    catch (SQLException e)
    ...{
        System.err.println("ERROR! Querying Salgrade: "
           + e.getMessage());
          return -1;
    }   
   }
     
}

如何更新呢?


D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc

D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or
acleJavaProc/tiger@iihero.oracledb.java
arguments: ''-u'' ''scott/tiger@iihero.oracledb'' ''-v'' ''-resolve'' ''OracleJavaProc.java''
creating : source OracleJavaProc
loading  : source OracleJavaProc
resolving: source OracleJavaProc
后边的应用示例:


SQL> create or replace function query_hisal(grade number) return number as langu
age java name ''OracleJavaProc.getHiSal(int) return int'';
  2  /

函数已创建。

SQL> set serveroutput on size 2000
SQL> call dbms_java.set_output(2000);

调用完成。
SQL> select query_hisal(5) from dual;

QUERY_HISAL(5)
--------------
          9999
全文完!

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/thinker28754/archive/2009/03/06/3962989.aspx

使用Oracle调用Java外部存储过程 在上面的示例中,我们声明了一个输入参数"inputParam"和一个输出参数"outputParam",然后调用了存储过程"call_external_procedure"来执行Java外部存储过程。在这个示例中,我们将创建一个名为"ExternalProcedure"的类,其中包含一个名为"executeProcedure"的静态方法。希望这篇文章对你有所帮助!以下是一个简单的存储过程示例,它将调用我们在上一步中创建的Java类的"executeProcedure"方法。 阅读详情

相关推荐

使用java实现oracle存储过程

使用java实现oracle存储过程。 共有3个小例子。实现的功能 1、无返回值的存储过程 如 insert 2、有返回值的存储过程(非列表)select id from tab 3、返回列表 如:select * from tab 顺便鄙视下csdn,作为一个it类型网站,使用Opera 竟然删除不了资源,悲哀!

oracle 存储过程调用java一

一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用oracle的sql语句来创建:e.g. 使用create or replace and compile java source named "" as       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。 SQL> create or replace a

thinker28754的专栏 9405

Godot4 TileMap分层绘制全攻略:解决角色、树木遮挡混乱,打造正确视觉层级

本文详细介绍了Godot4 TileMap分层绘制技术,通过图层管理和Y-Sort功能解决2D游戏中角色与物体的遮挡问题。从基础图层设置到高级优化策略,帮助开发者打造符合自然视觉规律的场景层次,提升游戏沉浸感。特别针对TileMap和TileSet的使用提供了实用技巧和代码示例。

weixin_28717411的博客 512

使用Java根据约定格式生成Oracle存储过程

记录:285 场景:在实际开发中,例如,系统升级,数模变化差异大,就涉及数模全量字段转化。根据建表语句逐个摘取字段,可行,但相对比较慢。本例根据表名从数据库读取字段,统一组装插入(INSERT INTO)和查询(SELECT)等基础SQL语句,具体业务SQL在此基础上按需修改。本例基于Oracle存储过程方式实现数模转换,先定义好一个规范的存储过程模板,使用Java代码,根据表名批量生成Oracle存储过程。这样就只需集中开发具体业务SQL即可。本例使用Java根据约定格式生成Oracle存储过程。...

zhangbeizhen18的博客 1249

工业级以太网通信实战:用FPGA驱动YT8531 PHY芯片的完整避坑指南

本文是一份针对工业级以太网通信的实战指南,详细讲解了如何使用FPGA驱动YT8531 PHY芯片。内容涵盖从硬件设计(电源、时钟、复位)到MDIO接口驱动开发、PHY配置与链路管理的全流程,并重点剖析了十个常见的开发“陷阱”及其解决方案,旨在帮助工程师在复杂的工业环境中实现稳定可靠的以太网通信连接。

weixin_29191669的博客 146

【吃瓜教程】周志华西瓜书课后习题第一章答案

第一章 1.1表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。 编号 色泽 根蒂 敲声 好瓜(标记) 1 青绿 蜷缩 浊响 是Y 4 乌黑 稍蜷 沉闷 否N 知识储备: 假设空间: 所有假设组成的空间 版本空间:与训练集一致的假设集合 从假设空间到版本空间算法大致如下: 1.删除与正例不一致的假设且删除与反例一致的假设 2.删除与正例不一致的假设 3.删除与反例一致的假设 具体选择哪种

MaxQuYY的博客 8370

Oracle中使用java存储过程

一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用oracle的sql语句来创建:e.g. 使用create or replace and compile Java source named “<name>” as       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。SQL> create or replace and c

这个名字可以改 759

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1352

Java代码 jdbc调用Oracle存储过程返回游标

public class JdbcUtil { public static Connection getConnection() throws Exception { Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("...

phillip629的博客 1148

ZYNQ:【1】深入理解PS端的TTC定时器(Part1:原理+官方案例讲解)

基于UG585详细讲解其中TTC的原理和使用案例。

Alex的技术博客 7887

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)

阿里云推出国内首个集成“快思考”与“慢思考”能力的 Qwen3-8B 大语言模型,以80亿参数和 128K 上下文支持,重塑AI应用边界并助力开发者高效部署

以微薄之力,予他人些许温暖. 2万+

怎样调用oracle存储过程,怎样在java代码中调用Oracle的存储过程

首先必须新建一张表:TEST(此过程用到Oracle sql developer向导建表的)CREATE TABLE "SCOTT"."TEST" ("TID" NUMBER(*,0) NOT NULL ENABLE,"TNAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,/*前两行看不懂,我建议你不要往下看了*/CONSTRAINT "TANYANGTEST_P...

weixin_33119123的博客 213

AUTOSAR CP R18-10 架构总览与导航

AUTOSAR CP R18-10 架构总览 本文档系统整理了AUTOSAR CP R18-10版本的199篇技术规范,涵盖7大架构层级: 应用层(15篇):包含车身舒适、底盘控制、HMI、安全系统、动力系统等AI应用 RTE(1篇):虚拟功能总线规范 服务层(159篇):细分为系统服务(OS/ECU管理/加密)、存储服务、通信服务(CAN/LIN/Ethernet) ECU抽象层(20篇):I/O与通信硬件抽象 MCAL(41篇):微控制器驱动层 复杂驱动(14篇):CDD设计与SPAL支撑 规范模板(2

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 722

oracle存储过程打包,以及在java代码中的调用

oracle存储过程打包,简单实例如下: WHENEVER SQLERROR CONTINUE;DROP PUBLIC SYNONYM cab_pkg_setup;WHENEVER SQLERROR EXIT SQL.SQLCODE//包头CREATE OR REPLACE PACKAGE cab_pkg_setup IS -- Global Variables

fengfengfeifei的专栏 988

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

oracle实现存储过程的分页并用java代码调用存储过程

<br />create table emp(<br />id int,<br />ename varchar2(30),<br />sale number(7,2) --共7位xxxxx.xx 最大就是这样的数据<br />)<br />--开发一个包---<br />create or replace package testpackage as<br />type test_cursor is ref cursor;<br />end testpackage;<br />--开始写分页的过程<br /

ljw520204的专栏 717

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java调用存储过程传number参数_Java代码调用Oracle的存储过程

Java代码调用Oracle的存储过程,存储函数和包java代码调用如下的存储过程和函数createorreplaceprocedurequeryEmpinfo(enoinnumber,penameoutvarchar2,psaloutnumber,pjoboutvarchar2)asbeginselectename,sal,empjobintopename,...

weixin_42306501的博客 427

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java 代码调用 oracle 存储过程

数据库本身是可以写定时任务的,不过这只局限于数据库中的数据变化;而 Java 可以写定时任务调用存储过程,从而与数据库进行交互。

贵在坚持 749

java 调用 oracle存储过程_java代码调用oracle存储过程

一、简介与调用mysql存储过程类型过程都是如下1、创建连接Connection conn = DriverManager.getConnection(url, user, password);2、创建CallableStatementCallableStatement statement = conn.prepareCall(sql);3、设置参数statement.setInt(1, id...

weixin_30234101的博客 443

oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数

PL/SQL Java 代码调用存储过程和函数 Oracle 驱动下载,提取码:k53w 。 注意:版本必须一致,否则无法使用 ● 使用 eclipse 新建一个 Java 工程,然后将上面提供的连接数据库 oracle 的驱动文件直接拷贝到 src 下,之后再都添加到构建路径(build path)中,如图: ● 建包建类 ● 以上操作完整源码: package cn.itcast.pr...

魏宇轩 720

java代码调用oracle存储过程,java调用Oracle存储过程,javaoracle存储过程,[Java]代码/**...

java调用Oracle存储过程,javaoracle存储过程,[Java]代码/**[Java]代码/** 首先在数据库中创建存储过程(如:pl_pro),代码如下: create or replace procedure pl_emp(pl_name varchar2,salary number) isbegin --根据用户名去修改职工工资 update emp set sal=sala...

weixin_33816047的博客 108

java 调用oracle包_Java代码调用Oracle的存储过程,存储函数和包

1 importjava.sql.CallableStatement;2 importjava.sql.Connection;3 importjava.sql.ResultSet;4 importjava.sql.SQLException;56 importoracle.jdbc.driver.OracleCallableStatement;7 importoracle.jdbc.driver.O...

weixin_31735943的博客 298

java代码调用oracle存储过程

一、简介   与调用mysql存储过程类型过程都是如下   1、创建连接 Connection conn = DriverManager.getConnection(url, user, password);   2、创建CallableStatement CallableStatement statement = conn.prepareCall(sql);   3、设置参数     

winter2summer的博客 675

存储过程之八-java代码调用oracle存储过程

一、简介   与调用mysql存储过程类型过程都是如下   1、创建连接 Connection conn = DriverManager.getConnection(url, user, password);   2、创建CallableStatement CallableStatement statement = conn.prepareCall(sql);   3、设置

DAO的博客 403
上一篇: 使用LAG和LEAD函数统计
下一篇: UTF-8转GBK,GBK转UTF-8和逆向native2ASCII
Phoenix_99
博客等级 码龄18年 116粉丝 358原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值