假设我有50个主表。对于每个主表,我有3个程序来执行CRUD操作。这是实时银行项目的一部分。
我的问题是,如何对此程序进行分组,以便于维护和使用。我的计划是为一个主表创建一个包,一次组3个程序。
为过程创建包是一个选项,但是我是否需要为单独的主表创建单独的包,这是否可行?这是一个好习惯吗?
答案 0 :(得分:1)
您已标记此“效果”,因此我假设您的部分问题与性能有关。包的使用不会对性能产生有意义的影响。无论您是拥有150个程序的1个包装还是50个包装,每个包装有3个程序或介于两者之间,对性能没有任何有意义的影响。确实,当您第一次调用包中的过程时,整个包被读入内存,因此较大的包可能涉及调用之间稍微更多的可变性(第一次调用必须比后续调用多做一些工作)。但是考虑到即使是PL / SQL代码中涉及最多的一小部分,如果你正在将包代码读入内存中是一个有意义的执行时间的一小部分,那么你可能已经超出了你应该的范围。停止优化。
使用包将代码组织到对您有意义的集合中。如果您的某些表密切相关,那么有一个包处理所有这些表可能是有意义的。
通常,我更倾向于拥有实现更高级别API的过程(例如create order
过程,除了将数据插入orders
之外,还会将行插入order_lines
表。表和invoice
表),而不是纯粹的CRUD过程,只与一个表交互。这是确保您的数据服从无法使用约束轻松定义的业务规则的更好方法(例如,order
始终至少有一个order_line
,order_total
in order
始终匹配order_line_total
中order_line
值的总和,order
始终生成invoice
等等。)