从 Java 调用 PL/SQL Web Toolkit 过程

Posted

技术标签:

【中文标题】从 Java 调用 PL/SQL Web Toolkit 过程【英文标题】:Call PL/SQL Web Toolkit procedures from Java 【发布时间】:2009-09-02 16:17:01 【问题描述】:

我需要从我的 Java 应用程序中调用一些 PL/SQL 过程。我可以用 JDBC 做到这一点。但问题是程序正在使用“PL/SQL Web Toolkit”及其包(htp、owa_util、owa_cookie、...)。当我打电话给他们时,我会遇到一些例外情况:

Exception in thread "main" java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.OWA_UTIL", line 323
ORA-06512: at "SYS.HTP", line 859
ORA-06512: at "SYS.HTP", line 974
...

是否可以使用 Java 包或任何其他方式调用这些过程?

我不能修改这些程序,但我不能创建一些。

感谢您的帮助。

【问题讨论】:

你是通过Statement的executeQuery()方法调用过程吗? 好吧,一点也不。我使用 CallableStatement 的 execute() 方法。此类是 Statement 的子接口。 【参考方案1】:

htf 和 htp 假设有些东西会提前设置好。当调用通过像 mod_plsql 这样的 PL/SQL 网关时,这是自动完成的。但也可以手动完成。

Ask Toad wiki上有很好的解释

要成功使用 htp 和 htf,您需要定义几个变量,然后初始化 cgi 环境。

【讨论】:

这似乎是完美的解决方案!我现在就处理这个。非常感谢!【参考方案2】:

该错误消息意味着您正在传递错误数据类型的参数或将结果分配给错误数据类型的变量。您需要重新检查您的代码,尤其是它的分配。或者,您可以在此处发布您的代码:我相信其中一位 SO Brain 将能够发现问题。

顺便说一句,您调用的是 OWA_UTIL 中的哪个方法?

【讨论】:

感谢您的回答。我确定程序参数是正确的。问题似乎是某些系统对象未创建/初始化。调用栈是:MyMethod --> SYS.PRINT('Hello world!') --> SYS.PRN('Hello World') --> OWA_UTIL.GET_CGI_ENV('GATEWAY_IVERSION')【参考方案3】:

这里是示例代码,您可以如何做到这一点 ---

              CallableStatement stmt = conn.prepareCall("? = call test(?)");
              stmt.registerOutParameter(1, OracleTypes.INTEGER);
              stmt.setString(2, "callIndex");
              stmt.execute();
              Integer outputValue = stmt.getInt(1);

这里的test是一个存储函数,通过java“可调用语句”调用。另外,如果你需要将变量传递给存储过程或oracle中的函数,你必须使用OracleTypes将正确的变量传递到那里。

【讨论】:

以上是关于从 Java 调用 PL/SQL Web Toolkit 过程的主要内容,如果未能解决你的问题,请参考以下文章

从 PL/SQL 调用 Web 服务时得到不支持的媒体类型

IDEA Intellij 如何调试从 Java 类调用的 PL/SQL 代码

从 Java 应用程序调用时,Oracle PL/SQL 包错误(ORA-04063 和 ORA-06508)

Oracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?

调用 Restful Web 服务和更新数据库表的 PL/SQL 过程