2012. 2. 1. 10:53ㆍ일 이야기
1. 자바 소스 생성 & 컴파일
import java.util.*;
import java.io.*;
import java.sql.*;
public class Dname
{
public static String getDname(int deptno) throws SQLException
{
String dname = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuffer sql = null;
sql = new StringBuffer()
.append("SELECT DNAME " + "\n")
.append(" FROM DEPT " + "\n")
.append(" WHERE DEPTNO = ? " + "\n");
try
{
conn = DriverManager.getConnection("jdbc:default:connection:");
pstmt = conn.prepareStatement(sql.toString());
int index = 1;
pstmt.setInt(index++, deptno);
rs = pstmt.executeQuery();
if (rs.next())
{
dname = rs.getString("DNAME");
}
}
/*
catch (SQLException e)
{
e.printStackTrace();
System.err.println(e.getMessage());
}
*/
finally
{
closeResultSet(rs);
closeStatement(pstmt);
}
return dname;
}
/**
* close ResultSet.
*
* @param rs
*/
public static void closeResultSet(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// ignore
}
}
/**
* close Statement.
*
* @param stmt
*/
public static void closeStatement(Statement stmt) {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
// ignore
}
}
};
2. 자바 소스 로드
loadjava -u scott/tiger@localhost:1521:ORCL -v -r -t Dname.java
// jar를 로드할 때
loadjava -u scott/tiger@localhost:1521:ORCL -v -t poi-3.2-FINAL-20081019.jar
// 소스를 로드할 때
loadjava -u scott/tiger@localhost:1521:ORCL -v -r -t TableDescExcelDown.java
[참고] jar 파일을 통째로 리소스 형태로 올릴려고 몇번 시도를 해 보았으나,
TableDescExcelDown 에서 참조하지 못하고 계속 에러가 났습니다.
그냥 클래스 형태로 jar 파일을 올릴 수 밖에 없는 것 같습니다.
3. 자바 클래스를 호출하는 펑션 생성
CREATE OR REPLACE FUNCTION FN_DNAME (
IN_DEPTNO NUMBER
)
RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'Dname.getDname(int) return java.lang.String';
CREATE OR REPLACE PROCEDURE SP_TABLE_DESC_EXCEL_DOWN (
FILE_NAME VARCHAR2,
OWNER VARCHAR2,
TABLE_NAME VARCHAR2
)
AS LANGUAGE JAVA
NAME 'TableDescExcelDown.craeteTableDesc(java.lang.String, java.lang.String, java.lang.String)';
4. 펑션 호출
// 쓰기권한이 필요한 경우
//SYSTEM 으로 로그인 후 SCOTT 유저의 파일 쓰기 권한 설정 : 특정 디렉토리에 쓰기 권한을 추가
call DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.io.FilePermission', 'D:\ssari\encyclopedia\oracle\java object\test7\*', 'write' );
SELECT FN_DNAME(10) FROM DUAL;
5. 소스를 드랍할 때
dropjava -u scott/tiger@localhost:1521:ORCL -v -t Dname.java
// jar를 드랍할 때
dropjava -u scott/tiger@localhost:1521:ORCL -v -t poi-3.2-FINAL-20081019.jar
// 소스를 드랍할 때
dropjava -u scott/tiger@localhost:1521:ORCL -v -t TableDescExcelDown.java
출처 : http://blog.naver.com/ssari93/130083061792
http://99yurina.blog.me/20128140494