java - 从 Java 调用 PL/SQL 过程

标签 java plsql

我正在用 Java 为用 PL/SQL 编写的应用程序编写一个 Web 服务 (WS) 接口(interface)。它有一个接口(interface)包,我试图将其转换为基于 WS 的调用。现在,里面的很多程序看起来像这样:

procedure mod_add_file (
 p_file     in out mod_documents_01.rec_file,
 p_new_id      out mod$d_documents.document_id_int%type,
 p_new_ver     out mod$d_documents.document_version_int%type,
 p_flag     in out varchar2,
 p_errors   in out varchar2 );

其中 mod_documents_01.rec_file 是一条记录,mod$d_documents.document_id_int (NUMBER) 和 mod$d_documents.document_version_int (NUMBER) 是表中的列。

type rec_file is record (
 id                        mod$d_documents_content.id%type,
 document_id               mod$d_documents.document_id_int%type,
 document_version          mod$d_documents.document_version_int%type,
 name                      mod$d_documents_content.name%type
  ) ;

我编写了一个库,用于为 java connection.prepareCall 生成正确的 PLSQL 代码。对于此示例,它生成以下代码(出于可读性目的,我添加了新行,通常全部都在一行中):

declare 
p_new_id mod$d_documents.document_id_int%type;
modInterfaceFile mod_documents_01.rec_file; 
p_new_ver mod$d_documents.document_version_int%type; 

begin 
p_new_id := ?;
modInterfaceFile.id := ?;
modInterfaceFile.document_id := ?;
modInterfaceFile.document_version := ?;
p_new_ver := ?;
MOD_INTERFACE.mod_add_file( modInterfaceFile ?  ? p_new_id p_new_ver ?  ? );
? := p_new_id;
? := modInterfaceFile.id;
? := modInterfaceFile.document_id;
? := modInterfaceFile.document_version;
? := modInterfaceFile.name;  
? := p_new_ver;  
end;

首先我的问题是,这种方法好不好还是有更好的方法?我最关心的是向过程传递记录和表列类型参数的方法。

此代码在尝试执行时也会生成错误:

PLS-00103: Encountered the symbol "" when expecting one of the following

该错误表明问题发生在:

MOD_INTERFACE.mod_add_file( modInterfaceFile ?  ? p_new_*HERE*id p_new_ver ?  ? );

我以前也遇到过类似的错误,但通过删除换行符解决了它们。但是,现在我没有特殊字符,只有空格,这让我很困惑。

感谢您提前提供的任何帮助。

最佳答案

您可能需要考虑使用JPublisher

“JPublisher 是一个完全用 Java 编写的实用程序,它生成 Java 类来表示数据库实体,例如 Java 客户端程序中的 SQL 对象和 PL/SQL 包。它还提供对从 SQL、PL/SQL、或服务器端 Java 到 Web 服务,并支持从数据库内部调用外部 Web 服务。”

关于java - 从 Java 调用 PL/SQL 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717512/

相关文章:

java - 尝试运行使用 subversion 共享的 netbeans 项目时生成错误

java - 如何比较 if-else 语句中的字符串?

java - 如何将 pl/sql 的输出关联数组传递给 java?

Oracle如何在where子句中使用数组?

sql - PL/SQL触发触发问题

sql - 触发器编译但不插入行

java - 在 Java 中合并 HTML 文件

Java:您可以从您自己的类中公开第 3 方接口(interface)吗

java - Android studio 中不允许嵌套事务

oracle - 创建 Oracle 过程