在Oracle中调用Java Source 的方法
通常有三种方法来创建java存储过程。 一、手动编写Java存储过程/函数 利用SQL脚本代码,手动编写可供Oracle调用的Java存储过程或函数,和普通的存储过程/函数创建方法类,以存储过程为例,语法如下: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED java_
通常有三种方法来创建java存储过程。
一、手动编写Java存储过程/函数
利用SQL脚本代码,手动编写可供Oracle调用的Java存储过程或函数,和普通的存储过程/函数创建方法类似,以存储过程为例,语法如下:
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED java_soure_name
AS
示例:创建一个简单的Hello World输出过程,调用JavaSource实现
- 创建Java Source
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED OracleJavaProc AS public class OracleJavaProc { public static void main(String[] args) { System.out.println("Hello World!"); } }
2. 创建存储过程 ,调用Java Source
CREATE OR REPLACE PROCEDURE testoraclejava AS LANGUAGE JAVA NAME 'OracleJavaProc.main(java.lang.String [])';
3. 调用存储过程
begin dbms_java.set_output(2000); ---设置Java输出缓冲区大小,否则无法输出数据 testoraclejava; ---调用存储过程 end;
二、使用外部class文件装载创建
将外部编译好的Java类文件(*.class)通过命令导入到数据库服务器中,实现Java存储过程的创建。
- 首先,既然要外部文件导入,那么就需要建立一个目录来存放*.class文件
- 其次,将编译好的class文件导入到服务器中
- 创建存储过程,调用导入的Java Source
创建目录和Java Source
SQL> create or replace directory test_dir as 'd:/oracle'; 目录已创建。 SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.class') 2 / Java 已创建。
TIPS:如果第二步时出现:ORA-29516: Aurora 断言失败: Assertion failure at eox.c:359
Uncaught exception System error: java/lang/UnsupportedClassVersionError 的错误,机器装了多个Java版本,oracle的Java版本低于环境变量设置的版本。
解决办法:用$ORACLE_HOME/jdk/bin/javac 重新编译java文件。
三、使用loadjava命令远程装载并创建
- 先创建一个类:
import java.sql.*; import oracle.jdbc.*; public class OracleJavaProc { //Insert a record to the database. public static void insertRecord(int id, String name, int age ,String xman_id) { System.out.println("Inserting new records for EMP..."); try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); String sql = "INSERT INTO emp " + "(ID,NAME,SALARY,XMAN_ID) " + "VALUES(?,?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,id); pstmt.setString(2,name); pstmt.setInt(3,age); pstmt.setString(4,xman_id); pstmt.executeUpdate(); pstmt.close(); } catch(SQLException e) { System.err.println("ERROR! Inserting record: " + e.getMessage()); } } //Select a reords from database public static boolean recordQuery(int id) { System.out.println("Querying records from EMP..."); try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); String sql = "SELECT * FROM emp WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,id); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+ rs.getInt(3)+"\t"+rs.getString(4)); } return true; } catch (SQLException e) { System.err.println("ERROR! Querying record: " + e.getMessage()); return false; } } }
- 使用loadjava命令将其装载到服务器端并编译:
D:\Oracle>loadjava -u hbi/hbi@orcl -v -resolve OracleJavaProc.java
arguments: '-u' 'hbi/hbi@orcl' '-v' '-resolve' 'OracleJavaProc.java'
creating : source OracleJavaProc
loading : source OracleJavaProc
resolving: source OracleJavaProc
Classes Loaded: 0
Resources Loaded: 0
Sources Loaded: 1
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0
- 创建存储过程和函数:
创建存储过程,实现数据插入:
create or replace procedure INSERT_RECORD(V_ID number, V_NAME varchar2, V_SALARY number, V_XMAN_ID varchar2) as language java name 'OracleJavaProc.insertRecord(int,java.lang.String,int,java.lang.String)';
create or replace function QUERY_TABLE(v_id number) return number as language java name 'OracleJavaProc.recordQuery(int) return int';
- 测试一下结果:
SQL> set serveroutput on size 2000 SQL> call dbms_java.set_output(2000); 调用完成。 SQL> execute add_salgrade(29, 'Charles', 5000, '029'); Inserting new records for EMP... PL/SQL 过程已成功完成。
- 更新你已经编写的Java存储过程
修改好Java源代码后,先dropjava ,再loadjava。
D:\Oracle>dropjava -u hbi/hbi@orcl -v OracleJavaProc
dropping: source OracleJavaProc
D:\Oracle>loadjava -u hbi/hbi@orcl -v -resolve OracleJavaProc.java
arguments: '-u' 'hbi/hbi@orcl' '-v' '-resolve' 'OracleJavaProc.java'
creating : source OracleJavaProc
loading : source OracleJavaProc
resolving: source OracleJavaProc
Classes Loaded: 0
Resources Loaded: 0
Sources Loaded: 1
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

Cette fois, le jeton Redstone $ Red sera lancé sur Binance LaunchPool sur Binance TGE! C'est également la première fois que Binance lance un mécanisme de limite de trading avant le marché! La limite du premier jour est de 200%, et l'interdiction sera levée après 3 jours pour éviter que "le pic sera atteint lorsque le marché s'ouvrira"! Launchpool Mécanisme présente le BinancelAunchpool participant à Redstone qui doit engager la période d'activité des jetons désignés (BNB, USDC, FDUSD) est de 48 heures: 08:00 UTC le 26 février 2025 à 08:00 UTC le 28 février 2025 terminant cette règle de limite quotidienne avant le marché: 18:00 le 28 février, 2025

Pour renforcer la sécurité de la base de données Oracle sur le système Debian, il faut de nombreux aspects pour commencer. Les étapes suivantes fournissent un cadre pour la configuration sécurisée: 1. Installation de la base de données Oracle et préparation du système de configuration initiale: Assurez-vous que le système Debian a été mis à jour vers la dernière version, la configuration du réseau est correcte et tous les packages logiciels requis sont installés. Il est recommandé de se référer à des documents officiels ou à des ressources tierces fiables pour l'installation. Utilisateurs et groupes: Créez un groupe d'utilisateurs Oracle dédié (tel que Oinstall, DBA, BackupDBA) et définissez-le pour lui. 2. Restrictions de sécurité Définir les restrictions de ressources: Edit /etc/security/limits.d/30-oracle.conf

Une pile est une structure de données qui suit le principe LIFO (dernier dans, premier sorti). En d'autres termes, le dernier élément que nous ajoutons à une pile est le premier à être supprimé. Lorsque nous ajoutons (ou poussons) des éléments à une pile, ils sont placés sur le dessus; c'est-à-dire surtout

Intellij Idea simplifie le développement de Boot Spring, ce qui en fait un favori parmi les développeurs Java. Son approche de configuration de la convention minimise le code passe-partout, permettant aux développeurs de se concentrer sur la logique métier. Ce tutoriel montre deux métho

Ce guide explore plusieurs méthodes Java pour comparer deux listes de table. Une comparaison réussie nécessite que les deux listes aient la même taille et contiennent des éléments identiques. Méthodes pour comparer les listes d'arraises en Java Plusieurs approches existent pour comparer AR
