第一,创建orcale中的java对象.
命令:
create or replace and compile java source named "TransMetaData"
as
/*
java code
*/
注意:1.不用写包名.
2.方法必须是static的
3.如果方法需要参数,则需要在第二步,创建带参数的存储过程.
如果方法需要返回值,则需要在第二步,创建带返回值的存储过程.
例如:
create or replace and compile java source named "TransMetaData"
as
import java.io.*;
import java.sql.*;
import java.util.Properties;
import oracle.jdbc.driver.OracleDriver;
public class TransMetaData {
/**
* @param args
* @throws SQLException
* @throws UnsupportedEncodingException
*/
public static void donow(String str) throws FileNotFoundException, IOException,SQLException, UnsupportedEncodingException {
str = "_"+str;
Properties props = new Properties();
props.load(new FileInputStream("c:/tables.properties"));
String DATABAST_SOURCE_URL = props.getProperty("DATABAST_SOURCE_URL"+str);
String DATABAST_SOURCE_USERNAME = props.getProperty("DATABAST_SOURCE_USERNAME"+str);
String DATABAST_SOURCE_PASSWORD = props.getProperty("DATABAST_SOURCE_PASSWORD"+str);
String DATABAST_TARGET_URL = props.getProperty("DATABAST_TARGET_URL"+str);
String DATABAST_TARGET_USERNAME = props.getProperty("DATABAST_TARGET_USERNAME"+str);
String DATABAST_TARGET_PASSWORD = props.getProperty("DATABAST_TARGET_PASSWORD"+str);
String SQL_SOURCE_TABLENAME = props.getProperty("SQL_SOURCE_TABLENAME"+str);
String SQL_TARGET_TABLENAME = props.getProperty("SQL_TARGET_TABLENAME"+str);
String SQL_TABLE_FIELD = props.getProperty("SQL_TABLE_FIELD"+str);
Connection conn = null;
Connection conn_to = null;
DriverManager.registerDriver(new OracleDriver());
conn = DriverManager.getConnection(DATABAST_SOURCE_URL,DATABAST_SOURCE_USERNAME,DATABAST_SOURCE_PASSWORD);
conn_to = DriverManager.getConnection(DATABAST_TARGET_URL,DATABAST_TARGET_USERNAME,DATABAST_TARGET_PASSWORD);
if (!conn.isClosed()&&!conn_to.isClosed()){
System.out.println("**源与目的数据库连接成功**");
conn.setAutoCommit(false);
conn_to.setAutoCommit(false);
}else{
new Exception("源与目的数据库连接不成功,请检查!");
}
PreparedStatement pstmt = conn.prepareStatement("SELECT "+SQL_TABLE_FIELD+" FROM "+SQL_SOURCE_TABLENAME);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
//numberOfColumns代表源表列的数量
String[] data = new String[numberOfColumns];
String mark = "";
String temp;
PreparedStatement pstmt2 = conn_to.prepareStatement("delete from "+SQL_TARGET_TABLENAME);
pstmt2.executeUpdate();
pstmt2.close();
while(rs.next()){
mark = "";
for(int i=0;i<numberOfColumns;i++){
if(rs.getString(i+1) != null){
temp = (rs.getString(i+1).trim());
}else{
temp="";
}
data[i] = new String(temp.getBytes("ISO-8859-1"), "GBK");
if (i!=(numberOfColumns-1)){
mark = mark + "?,";
}else{
mark = mark + "?";
}
}
String sql1 = "insert into "+SQL_TARGET_TABLENAME+" ( "+SQL_TABLE_FIELD+" ) values ( "+mark+" )";
PreparedStatement pstmt1 = conn_to.prepareStatement(sql1);
for(int i=0;i<numberOfColumns;i++){
pstmt1.setString(i+1,data[i]);
}
pstmt1.executeUpdate();
pstmt1.close();
}
conn.commit();
conn_to.commit();
System.out.println("**源与目的数据导出成功**");
}
}
/
第二,创建存储过程,带参数
create or replace procedure TransMetaData(p_str in varchar2)
as language java
name 'TransMetaData.donow(java.lang.String)';
/
注意:
1.如果第一步的java对象方法donow无参数,即为static donow()
则此处为create or replace procedure TransMetaData
as language java
name 'TransMetaData.donow()';
/
2.注意两个存储过程的不同,我们的参数在java代码里为String,
因此这里写java.lang.String.
3.如果需要有返回值,(java代码修改省略,返回double类型),则存储过程为
create or replace procedure TransMetaData(p_str in varchar2) return number
as language java
name 'TransMetaData.donow(java.lang.String) return double';
/
第三,执行存储过程
无参数:exec TransMetaData;
带参数:exec TransMetaData(1);
如果:通过pl/sql执行java代码时,在java代码里对数据库进行操作,出现类似如下错误:
ORA-29532: Java 调用被未捕获的 Java 例外终止:
java.security.AccessControlException: the Permission (java.net.SocketPermission
127.0.0.1:2002 connect,resolve) has not been granted to SINBOY. The PL/SQL to
grant this is dbms_java.grant_permission( 'SINBOY',
'SYS:java.net.SocketPermission', '127.0.0.1:2002', 'connect,resolve' )
ORA-06512: 在"SINBOY.TEST9", line 0
ORA-06512: 在"SINBOY.TRG", line 2
解决办法是:
权限不够
对os上的文件赋权限就可以了
grant javauserpriv to SINBOY;
附上刚找到的
Oracle 9i 角色列表
序号<o:p></o:p>
|
角色<o:p></o:p>
|
说明<o:p></o:p>
|
1
|
AQ-ADMINISTRATOR-ROLE
|
队列管理员角色
|
2
|
AQ-USER-ROLE
|
队列用户角色
|
3
|
CONNECT
|
连接
|
4
|
CTXAPP
|
应用
|
5
|
DBA
|
数据库管理员
|
6
|
DELETE-CATALOG-ROLE
|
删除目录角色
|
7
|
EXECUTE-CATALOG-ROLE
|
执行目录角色
|
8
|
EXP-FULL-DATABASE
|
扩展整个数据库
|
9
|
GLOBAL_AQ_USER_ROLE
|
全局队列用户角色
|
10
|
HS-ADMIN-ROLE
|
HS管理角色
|
11
|
IMP-FULL-DATABASE
|
IMP全局数据库
|
12
|
JAVADEBUGPRIV
|
JAVA调试权限
|
13
|
JAVAIDPRIV
|
JAVA ID权限
|
14
|
JAVASYSPRIV
|
JAVA系统权限
|
15
|
JAVAUSERPRIV
|
JAVA用户权限
|
16
|
JAVA-ADMIN
|
JAVA管理员
|
17
|
JAVA-DEPLOY
|
JAVA调度
|
18
|
OEM-MONITOR
|
OEM遥控器
|
19
|
OLAP_DBA
|
联机分析数据库管理员
|
20
|
RECORVERY-CATALOG-OWNER
|
恢复目录所有者
|
21
|
RESOURCE
|
资源
|
22
|
SELECT-CATALOG-ROLE
|
选择目录角色
|
23
|
WKADMIN
|
WK管理员
|
24
|
WKUSER
|
WK用户
|
25
|
WM_ADMIN_ROLE
|
WK管理员角色
|
//-------------------------------附上一个自己写的简单的例子---------------------------------------
第一步:
create or replace JAVA SOURCE Named Js_Rand
AS
import java.util.Date;
public class showDate {
public static Date showNowDate(){
return new java.util.Date();
}
}
/
第二步.
CREATE OR REPLACE function rand return VARCHAR2
AS
language Java Name 'showDate.showNowDate() return Date';
/
第三步:
begin
dbms_output.put_line(rand);
End;
/
多谢指导
相关推荐
oracle pl sql 实例精解 oracle pl sql 实例精解 oracle pl sql 实例精解
NULL 博文链接:https://jonsion.iteye.com/blog/890062
win7 64位oracle11g 64位PL/SQL安装说明
0racle数据库应用管理解决方案
精通racle.10g.Pl.SQL编程.pdf
oracle中pro*c的学习 一 Pro*C 程序概述: 1.什么是Pro*C程序 ...在Pro*C程序中还可以嵌入PL/SQL块, 以改进应用程序的性能, 特别是在网络环境下,可以减少网络传输和处理的总开销。 2.Pro*C的程序结构图
0racle查询
0racle数据库管理精华 6个资源包
NULL 博文链接:https://chun521521.iteye.com/blog/2037841
5.5 PL/SQL中的异常处理 5.6 程序中的控制结构 5.6.1 程序控制 5.6.2 IF逻辑结构 5.6.3 CASE语句 5.6.4 Loop循环 5.6.5 WHILE循环 5.6.6 FOR循环 5.7 如何创建存储过程以及创建存储过程的原因 5.8 函数的创建和使用...
《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...
使用SQL*oader乘10racle Data Pump导入和导出数据 使用SQL重放、变更管理和缓存结果 使用闪回和自动撤消管理功能避免人为错误 构建和调整PL/SQL触发器、函数和程序包 使用Java、JDBC和XMIL开发数据库应用程序 ...
安装数据库的步骤,以及遇到的一些问题,仅仅供参考
作 者:钱慎一,张素智 编 出 版 社:中国水利水电出版社 ISBN:9787508468303 出版时间:2009-09-01 版 次:1 页 数:468 装 帧:平装 ...附录A 0racle 11g词汇集锦 附录B 0facle 11g选件概述
作 者:钱慎一,张素智 编 出 版 社:中国水利水电出版社 ISBN:9787508468303 出版时间:2009-09-01 版 次:1 页 数:468 装 帧:平装 ...附录A 0racle 11g词汇集锦 附录B 0facle 11g选件概述
toad for 0racle 9.7 toad for 0racle 9.7 toad for 0racle 9.7 toad for 0racle 9.7 toad for 0racle 9.7
java && oracle基础资料 设计JAVA && oracle的很多核心资料