在Oracle中使用软件包的优缺点

时间:2015-03-04 15:46:39

标签: asp.net oracle stored-procedures plsql packages

我对使用包很新。我的团队正在决定是否在我们的应用程序中使用包。我们目前有4个使用内联sql的应用程序。我们决定将每个sql语句放在一个存储过程中,然后将Stored过程逻辑分组到包中(这些存储过程将在应用程序之间共享)。使用包的潜在利弊是什么?

我们的应用程序是使用c#在asp.net中编写的。

4 个答案:

答案 0 :(得分:5)

所以你想开始讨论使用包的优点和缺点?好吧,如果你能与我们分享,那么我会把缺点放在你身上。我将与你分享优点,而不是用我自己的话说,因为这将重复托马斯·凯特已经说过here

  
      
  • 打破依赖关系链(安装新的包体时没有级联失效 - 如果   你有程序调用程序 - 编译一个程序会使你的数据库失效)

  •   
  • 支持封装 - 我将被允许编写MODULAR,易于理解的代码 - 而不是   然后是单一的,不可理解的程序

  •   
  • 可测量地增加我的命名空间。包名称必须在模式中是唯一的,但我可以   跨包的许多程序具有相同的名称而不会发生冲突

  •   
  • 支持重载

  •   
  • 在您需要时支持会话变量

  •   
  • 促进整体良好的编码技术,让你编写模块化的代码,   可理解的,逻辑上组合在一起....

  •   
     

如果您是程序员 - 您会看到软件包的优势超过了独立的扩散   心跳中的程序。

答案 1 :(得分:2)

如果你要让不同的应用程序访问相同的表,在数据库上发生相同的业务逻辑(例如约束等),那么存储过程就是可行的方法。把它们看作是“前端”(即任何不是数据库的东西)和数据库之间的接口,就像web服务为中间层提供接口一样(我想;我真的不是在非数据库相关的架构上!)。

您可公开调用的存储过程通常是create_a_new_customeradd_a_new_addressretrieve_customer_details等内容,其中每个操作背后的逻辑都被编码,相关的过程将被分组到同一个过程中包。您不希望编写一系列只对表执行dml的过程,并希望应用程序在调用每个过程时能够计算出来。

答案 2 :(得分:2)

这是这个问题的一个方便的决策图。

enter image description here

答案 3 :(得分:2)

添加使用包的副作用......

如果我有一个包含我的应用程序运行所需的所有存储过程和函数的包。考虑一个小的存储过程由于某些问题而突然失败(例如,表结构中的某些更改)或其他一些小问题,以便只有一个存储过程变为无效。

在这种情况下,整个包裹会变得无效吗?影响整个申请?

另一方面,如果不使用包并创建独立的proc和函数,那么只有一个proc会失败。