【发布时间】:2015-02-02 17:03:40
【问题描述】:
我正在尝试将退出代码从 Java 方法返回到 PL/SQL。似乎总是有例外。我怎样才能找出异常 n 是。我在 12c 上跑步。
SQL> CREATE OR REPLACE JAVA SOURCE NAMED UTLCMD AS
2 import java.lang.Runtime;
3 public class UTLCMD
4 {
5 public static int execute(String command)
6 {
7 int exitCode = 0;
8
9 try
10 {
11 Runtime rt = java.lang.Runtime.getRuntime();
12 Process proc = rt.exec(command);
13 exitCode = proc.waitFor();
14 }
15 catch(Exception e)
16 {
17 System.out.println(e.getMessage());
18 exitCode = 12;
19 }
20
21 return exitCode;
22 }
23 }
24 /
Java created.
SQL> CREATE OR REPLACE FUNCTION JavaRunShellCommand(
2 command IN VARCHAR2)
3 RETURN NUMBER
4 AS LANGUAGE JAVA
5 NAME 'UTLCMD.execute(java.lang.String) return oracle.sql.NUMBER';
6 /
Function created.
这是尝试调用该方法的结果。
SQL> VARIABLE n NUMBER;
SQL> CALL JavaRunShellCommand('cmd.exe /C CALL C:\Users\pwatson\src\java\my.bat') INTO :n;
Call completed.
SQL> PRINT n
N
----------
12
SQL> CALL JavaRunShellCommand('cmd.exe /C EXIT /B 3') INTO :n;
Call completed.
SQL> PRINT n
N
----------
12
SQL> SELECT JavaRunShellCommand('cmd.exe /C CALL C:\Users\pwatson\src\java\my.bat') AS R FROM DUAL;
R
----------
12
SQL> SELECT JavaRunShellCommand('cmd.exe /C EXIT /B 3') AS R FROM DUAL;
R
----------
12
【问题讨论】:
-
您是否为
cmd.exe运行过dbms_java.grant_permission?您正在将错误写入控制台,因此您需要检查跟踪文件以找到它。你为什么要捕捉异常,让它们冒泡到你的会话可能更简单。 -
将返回类型改为字符串,并返回异常信息。
标签: java oracle plsql java-stored-procedures