본문 바로가기

development/oracle

오라클에서 자바클래스 실행하기

*

* ExecuteCmd.java

* This is a sample application that uses the Runtime Object

* to execute a program.

*

*/

 

/* Import the classes needed for Runtime, Process, and Exceptions */

import java.lang.Runtime;

import java.lang.Process;

import java.io.IOException;

import java.lang.InterruptedException;

 

class ExecuteCmd {

 

public static void main(String args[]) {

 

System.out.println("In main");

 

try {

/* Execute the command using the Runtime object and get the

Process which controls this command */

 

Process p = Runtime.getRuntime().exec(args[0]);

 

/* Use the following code to wait for the process to finish

and check the return code from the process */

try {

 

p.waitFor();

 

/* Handle exceptions for waitFor() */

 

} catch (InterruptedException intexc) {

 

System.out.println("Interrupted Exception on waitFor: " + intexc.getMessage());

}

 

System.out.println("Return code from process"+ p.exitValue());

 

System.out.println("Done executing");

 

/* Handle the exceptions for exec() */

 

} catch (IOException e) {

System.out.println("IO Exception from exec : " +

e.getMessage());

e.printStackTrace();

}

}

}

------------------------------------------------------------------

 

위의 소스를 컴파일 한다.

> javac ExecuteCmd.java

DB에 클래스 파일을 로드한다.

$> loadjava -u scott/tiger ExecuteCmd.class

 

이미 있는 때 드롭하고 다시하거나 강제로 로드한다.

> dropjava -u scott/tiger ExecuteCmd.class

> loadjava -u scott/tiger ExecuteCmd.class -f

 

프로시져를 하나 만든다.

SQL> connect scott/tiger

SQL> CREATE OR REPLACE PROCEDURE executecmd (S1 VARCHAR2) AS LANGUAGE JAVA name 'ExecuteCmd.main(java.lang.String[])';

/

 

권한을 부여

SQL> connect system/manager

SQL> grant javasyspriv to scott;

SQL> grant javauserpriv to scott;

 

실행을 해본다.

SQL> connect scott/tiger

SQL> set serveroutput on

SQL> call dbms_java.set_output(2000);

SQL> EXEC executecmd('/usr/bin/ls -la');

 

In main

Return code from process 0

Done executing

 

* 0을 리턴해야 실행이 된거에요. 반드시 명령어는 절대경로로 사용해야 한다.