2009-10-19 72 views
3

我正在为使用Oracle的大公司开发企业软件。主要的处理单元计划在PL/SQL中开发。我想知道是否有像Hibernate for Java一样的ORM,但是用于PL/SQL的ORM。我对如何使用PL/SQL和Oracle系统表制作这样的框架有一些想法,但这很有趣 - 为什么以前没有人这样做过?你认为在速度和内存消耗方面有什么效果?为什么?ORM for Oracle pl/sql

+0

我的意思是,我可以创建一组Oracle对象(使用脚本生成的'使用创建或替换类型FOO作为对象..'语句) ,这将缓解pl/sql软件的进一步发展(那些基本上包含CRUD操作)。你认为,这些物体会有效地运作吗? – Arino 2009-10-19 12:20:19

回答

10

奥姆斯存在提供像Java和数据库无关的语言,如Oracle数据库管理系统之间的接口。相比之下,PL/SQL更了解Oracle数据库管理系统,并且可以与之配合使用(并且比Java + ORM更有效)。所以PL/SQL和Oracle DBMS之间的ORM既是多余的,也是无益的!

+0

我的意思是我可以创建一组Oracle对象(使用'create或replace type FOO as object ..'语句使用脚本生成),这将简化pl/sql软件的进一步开发(这些将基本包含CRUD操作)。你认为,这些物体会有效地运作吗? – Arino 2009-10-19 12:06:44

+0

我从来没有遇到过这种情况会有所帮助,并且我相当确信性能不会像没有使用对象的PL/SQL代码那样高效。您也很有可能失去执行基于集合的操作和批量插入/更新的能力。 – 2009-10-19 12:52:15

2

正如托尼指出奥姆斯真正作为应用程序和Db背景下边界之间的帮手。

如果您正在寻找抽象数据库层额外的水平,你可能想看看表封装。这是21世纪初的一个大趋势。如果你搜索,你会发现在这个问题上的大量白皮书。

Plsqlintgen似乎仍然是围绕在http://sourceforge.net/projects/plsqlintgen/

+0

你认为这种技术有效吗? – Arino 2009-10-19 12:46:37

+0

我认为这取决于抽象背后的原因和项目的规模。如果你有100张桌子,它很快就会成为维修的噩梦。表现也可能是一个问题。一般来说,我试图避免这种模式,除非它是满足安全性(SOX,HIPPA等)问题的唯一方法。 – 2009-10-19 19:24:56

0

Oracle是一个关系数据库,同时还也有能力作为面向对象的数据库工作。它通过在关系结构之上构建一个抽象层(相当自动)来实现这一点。这似乎不需要任何“工具”,因为它已经内置了。

1

这个答案对在PL/SQL塔皮斯(表API)来进行CRUD操作包裹你的表的利弊一些相关的想法。

Understanding the differences between Table and Transaction API's

也有在过去几年英国甲骨文用户组就是一个很好的小组讨论 - 总的结论是反对使用表API和事务API,出于同样的原因 - 的PL /力量sql是SQL语句的过程控制,而TAPI则推动您远离编写基于集合的SQL操作和逐行处理。

TAPI的参数是您可能希望实施某种访问策略的地方,但Oracle提供了许多其他方式来执行此操作(细粒度访问控制,约束,插入/更新/等的触发器可以是用于填充默认值并强制调用代码传递有效请求)。

我肯定会建议不要在PL/SQL对象类型中封装表。

很多pl/sql的生产力来自于这样一个事实,即您可以根据底层数据库结构轻松定义事物 - 行记录类型可以简单地定义为%ROWTYPE,并且会自动受到影响表结构变化。

myRec myTable%ROWTYPE 
INSERT INTO table VALUES myRec; 

这也适用于基于对这些类型的集合,并且有可用于获取&插入整个集合强大的批量操作。另一方面,每次你想改变对象类型时,都必须明确地影响对象类型 - 每次表的改变都需要对象类型的影响和释放,使你的工作翻一番。

如果您正在使用继承和类型集合(您可以'替换'一个包,但一旦被另一个类型使用后不能替换它,那么它也可能很难发布更改。

这不会把OO PL/SQL放在一个地方 - 它绝对可以简化代码(即避免代码重复,任何地方你都可以从多态性中获益) - 但最好理解并发挥其优势语言和主要优势在于语言与底层数据库紧密耦合。这就是说,我经常发现自己创建了构建默认记录,插入记录等的程序 - 通常足以让它具有编辑宏 - 但我从来没有找到一个好的参数来自动生成此代码所有表(创建大量未使用的代码的好方法)