加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle包和Java包之间的映射

发布时间:2020-12-12 16:29:58 所属栏目:百科 来源:网络整理
导读:在我的数据库接口库 jOOQ中,我想添加对Oracle(或DB2等)包的支持.我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的Java类.例如,这个存储的函数 CREATE FUNCTION f_author_exists (author_name VARCHAR2) RETURNS NUMBER; 将生成一个可以像这
在我的数据库接口库 jOOQ中,我想添加对Oracle(或DB2等)包的支持.我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的Java类.例如,这个存储的函数
CREATE FUNCTION f_author_exists (author_name VARCHAR2) RETURNS NUMBER;

将生成一个可以像这样使用的类(注意,还有很多方便的方法,这个例子只显示了一般设计):

// A new "function call instance". The function needs to be instanciated
// once per call
FAuthorExists f = new FAuthorExists();

// Set the function parameters on the call instance and call it
f.setAuthorName("Paulo");
f.execute(connection);

// Fetch the result from the function call instance
BigDecimal result = f.getReturnValue();

我选择映射SQL函数的原因 – > Java类是因为存储过程允许复杂的返回值(几个OUT或IN OUT参数),我希望在调用过程后能够逐个获取:

p.getOutParam1();
p.getOutParam2();

现在这个设计适用于存储的函数/过程,无法进行重载.但是,在Oracle(或DB2)的软件包中,我可以使用多个具有相同名称的函数,例如

CREATE PACKAGE my_package IS
  FUNCTION f_author_exists (name VARCHAR2) RETURNS NUMBER;
  FUNCTION f_author_exists (name VARCHAR2,country VARCHAR2) RETURNS NUMBER;
END my_package;

当我为每个函数(或过程)生成一个类时,我将与几个FAuthorExists Java类命名冲突.一个蹩脚的解决方案是为类名添加索引,例如FAuthorExists2,FAuthorExists3.另一个蹩脚的解决方案是从参数名称/类型直接生成某种哈希值(或值本身)到类名,例如FAuthorExistsVARCHAR2,FAuthorExistsVARCHAR2VARCHAR2.由于显而易见的原因,这两种解决方

有没有人有这个问题的简单解决方案?或者可能是一个更好的整体设计的想法,不会产生这样的功能名称重载问题?

任何反馈意见!

您的getReturnValue函数可以在调用时确定要调用的重载函数,具体取决于已设置的输入参数的数量 – 但我认为如果您坚持使用setParam1而不是setName,它将变得更简单

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读