我正在尝试将退出代码从 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