用Java代码创建Oracle触发器要怎么实现

用Java代码创建Oracle触发器要怎么实现,第1张

1、Java代码创建Oracle触发器

Java代码如下:

create or replace and compile java source named jym as

import java.io.BufferedReader

import java.io.InputStream

import java.io.InputStreamReader

import java.io.OutputStream

import java.io.StringWriter

import java.net.InetSocketAddress

import java.net.Socket

import java.sql.Connection

import java.sql.DriverManager

import java.sql.PreparedStatement

import java.sql.Statement

public class JYM {

public static  String sendSynMsg(String ipAddr, byte[] datas) throws Exception{

InetSocketAddress endpoint = new InetSocketAddress(ipAddr ,18002)

Socket socket = null

OutputStream out = null

InputStream in = null

try {

socket = new Socket()

socket.connect(endpoint)

out = socket.getOutputStream()

in =  socket.getInputStream()

out.write(datas)

out.flush()

return null

} finally {

if (out != null) {

try {

out.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

if (in != null) {

try {

in.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

if (socket != null) {

try {

socket.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

}

}

public static void say(String ip,byte[] context) throws Exception {

String str=JYM.sendSynMsg(ip,context)   

Class.forName("oracle.jdbc.driver.OracleDriver")

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.9.109:1521:orcl","zhym","jhhz621")  

PreparedStatement pr=conn.prepareStatement("insert into backdata(context) values(?)")

pr.setBytes(1, context)

pr.executeUpdate()

pr.close() 

conn.close()

}

}

create or replace and compilejava source named jym as

import java.io.BufferedReader

import java.io.InputStream

importjava.io.InputStreamReader

import java.io.OutputStream

import java.io.StringWriter

importjava.NET.InetSocketAddress

import java.net.Socket

import java.sql.Connection

import java.sql.DriverManager

importjava.sql.PreparedStatement

import java.sql.Statement

public class JYM {

public static  StringsendSynMsg(String ipAddr, byte[] datas) throws Exception{

InetSocketAddress endpoint = new InetSocketAddress(ipAddr ,18002)

Socket socket = null

OutputStream out = null

InputStream in = null

try {

socket = new Socket()

socket.connect(endpoint)

out = socket.getOutputStream()

in = socket.getInputStream()

out.write(datas)

out.flush()

return null

} finally {

if (out != null) {

try {

out.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

if (in != null) {

try {

in.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

if (socket != null) {

try {

socket.close()

} catch(Exception ex) {

ex.printStackTrace()

}

}

}

}

public static void say(String ip,byte[] context) throws Exception {

String str=JYM.sendSynMsg(ip,context)

Class.forName("Oracle.jdbc.driver.OracleDriver")

Connection conn =DriverManager.getConnection("jdbc:oracle:thin:@192.168.9.109:1521:orcl","zhym","jhhz621")

PreparedStatement pr=conn.prepareStatement("insert intobackdata(context) values(?)")

pr.setBytes(1, context)

pr.executeUpdate()

pr.close()

conn.close()

}

}

2、存储过程调用Java source

Sql代码

代码写好后可以先用存储过程测试:

Sql代码

总结:假如运行存储过程时爆出了  请给用户复制权限的提示则按照提示在sysdba 下赋权限,如:

Sql代码

exec dbms_java.grant_permission('zhym','SYS:java.net.SocketPermission','192.168.9.12:18002','connect,resolve')

exec dbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')

execdbms_java.grant_permission('zhym','SYS:java.Net.SocketPermission','192.168.9.12:18002','connect,resolve')

execdbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')

exec 后面的语句会在你的报错提示中打印出来,只要前面加exec就可以了。

触发器顾名思意就是在某个动作执行时自动触发执行的,不用调用,比如你是在add和delete数据时加触发器,只要你定义的对,数据库在向你指定的那张表add和delete数据时,该触发器就会自动触发


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9423539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存