我正在用 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/