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

BurpSuite实战:5分钟搞定DVWA的CSRF漏洞测试(附详细截图)

本文详细介绍了如何使用BurpSuite在DVWA靶场中进行CSRF漏洞测试,包括环境配置、攻击原理剖析、分步攻击演示及企业级防御方案。通过实战案例,帮助读者深入理解CSRF漏洞的危害与防护措施,提升Web应用安全防护能力。

weixin_30879169的博客 495

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

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

zhangbeizhen18的博客 1249

Simulink与CANape联动教程:模型调试阶段如何快速标定参数观测信号

本文详细介绍了如何通过Simulink与CANape联动,实现模型参数的实时标定与信号观测,从而避免反复编译,提升开发效率。核心在于正确配置Simulink中的标定量与观测量,生成A2L描述文件,并利用XCP协议建立通信,为新能源汽车与自动驾驶系统的快速原型开发提供高效解决方案。

weixin_29006187的博客 378

第1关:STL模板之queue实例一:最少个数

头歌自创答案

xiyunSacire的博客 819

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

24、交通信号协调算法与模型解析

本文深入解析了交通信号协调中的关键算法与模型,包括多路径进展模型、MAXBAND网络系统模型和松弛启用带模型。这些模型通过合理安排相位序列、优化绿波带宽等方式,提高了交通运行的效率。文章还探讨了交通控制从单点控制向网络协调的发展趋势,分析了当前面临的挑战与机遇,并提出了未来研究方向,如借助信息技术和机器学习,深入研究交通网络的基本构成,以实现智能化和精准化的信号协调。

agile9scrum的博客 134

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

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

phillip629的博客 1148

ESP32-IDF开发之旅 网络篇⑩ Web配网

本文介绍了基于ESP32S3的Web配网实现方案。作者通过移植开源项目,在ESP32S3上实现了WiFi配置功能,包括AP模式创建、HTTP服务器搭建、NVS存储读写等核心功能。文章详细解析了代码结构,包含WiFi初始化、事件处理、NVS存储管理和HTML页面服务等关键模块。实现方案采用AP+STA双模式,支持通过网页扫描WiFi并保存配置信息,适用于物联网设备的网络配置场景。代码中使用了FreeRTOS任务、ESP-IDF事件组等技术,并提供了完整的错误处理和日志记录功能。

单片机菜鸟哥的博客 350

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 967

怎样调用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

嵌入式软件工程师面试题目整理(一)

文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注

嵌入式与Linux那些事的博客 7883

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

AI Agent驱动的多模态情感分析方法:从BERT到Vision Transformer的探索

情感分析(Sentiment Analysis)是自然语言处理(NLP)与计算机视觉(CV)中一项重要任务。传统的情感分析主要依赖于文本数据,但在现实应用中,情感往往通过 语言、语音、表情、姿态 等多模态信号共同传达。因此,结合 多模态深度学习 的 AI Agent 在情感理解中具有广阔的前景。

一键难忘的博客 738

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_42306501的博客 427

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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、付费专栏及课程。

余额充值