我正在尝试逐步编写一个 java 函数,它可以采用 Oracle XML (BI) Publisher Report(不是商业智能中使用的 BI Publisher,而是 Oracle 应用程序使用的 XML Publisher)功能,并将报告的输出提供为一个团 block 。所以基本上我想采用一个输出税务文件的报告定义和模板,而不是将税务文件返回到一个 clob 中,然后我可以使用 PLSQL 进一步操作它。如果有人知道可以执行此操作的现有功能,请告诉我。
我对 Java 了解不多,所以选择了这个 Stack Overflow Calling Java from PL/SQL问题并尝试开始并扩展它。
但是我无法将某些类导入到 Java 程序中。
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Hello" AS
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import oracle.apps.xdo.oa.schema.server.TemplateHelper;
public class Hello
{
public static String world()
{
return "Hello world";
}
};
/
如果我尝试 import oracle.apps.xdo.oa.schema.server.TemplateHelper;
Java 编译失败并显示
JAVA SOURCE 的错误 你好:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 Hello:13: cannot find symbol
0/0 symbol : class TemplateHelper
0/0 1 error
0/0 import oracle.apps.xdo.oa.schema.server.TemplateHelper;
0/0 ^
0/0 location: package oracle.apps.xdo.oa.schema.server
类 TemplateHelper 在服务器上的 $JAVA_TOP/oracle/apps/xdo/oa/schema/server/TemplateHelper.class 下,$JAVA_TOP 包含在 CLASSPATH 中。
我也试过
loadjava -user apps ./oracle/apps/xdo/oa/schema/server/TemplateHelper.class
但出于某种原因,这会返回
SQL Error while connecting with oci8 driver to default database: Closed Connection
exiting : could not open connection
即使所有其他程序都可以正常连接。
有谁知道如何导入类?
最佳答案
你可以试试CREATE JAVA CLASS
:
CREATE OR REPLACE DIRECTORY xml_template_dir
AS '/path/to/oracle/apps/xdo/oa/schema/server/';
/
CREATE JAVA CLASS USING BFILE (xml_template_dir, 'TemplateHelper.class' )
/
然而,虽然这可能会加载该类,但它几乎肯定会有其他依赖项,并且当您尝试使用该类时会失败,然后您将需要加载这些依赖项,然后是依赖项等等...
您最好找到一个包含整个包的JAR
(或者从您现有的目录结构中自己创建包)并使用loadjava
:
loadjava -user APPS/password@sid -resolve XML_Publisher.jar
(如果您需要覆盖加载失败的现有类,那么您可能还需要 -force
选项。)
然后您可以使用以下方法测试是否有任何加载失败:
SELECT object_name
FROM user_objects
WHERE object_type = 'JAVA CLASS'
AND status != 'VALID';
另请注意,仅仅因为类加载成功并不意味着它不会在您调用该类时产生运行时异常。
关于java - Oracle 如何在从 plsql 调用 java 时导入缺少的 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580998/