通过将Oracle过程定义为Oracle过程来从Oracle过程运行Java过程



我们使用Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production.

我已经在Oracle中加载了OS_COMMAND包,我看到它都是java。

我最感兴趣的过程是允许用户在Oracle过程中运行Linux命令的过程。它的定义如下:ex 1

function exec(p_command in varchar2, p_stdin in blob) return number
is language java name 'ExternalCall.exec(java.lang.String, oracle.sql.BLOB) return int';

如何在Oracle PL中定义这个?SQL过程或一个函数,以使其运行为一个Oracle函数?

我唯一的例子是一个Oracle过程,它定义了一个java方法作为Oracle函数使用。内容如下:ex 2

CREATE OR REPLACE PROCEDURE SLDPROC.shell (p_command IN VARCHAR2)
AS LANGUAGE JAVA 
NAME 'Host.executeCommand (java.lang.String)';
/

来自以下java方法:ex 3

public class Host {
public static void executeCommand(String command) ...
...

所以没有使用java很长一段时间(20年),我如何创建一个类似的Oracle过程来包装java过程像set_exec_in_shell过程定义在第一个例子中,例1?

谢谢!

我如何在Oracle过程中定义这个,以便它作为Oracle函数运行?

你不需要"define"因为它已经是OS_COMMAND包中的一个过程;只要确保包已编译,然后直接从函数调用它即可。

CREATE FUNCTION your_function RETURN NUMBER IS
BEGIN
OS_COMMAND.SET_EXEC_IN_SHELL();
RETURN 1;
END;
/

最新更新