过程中的参数列表

时间:2018-05-03 08:08:19

标签: oracle plsql

有一个带有2个参数的程序A,这个程序在10个存储过程中调用。(b,c,d ....) 现在proc A更新了3个参数,有没有办法在一次调用10个proc中更新proc A参数列表。

提前致谢

2 个答案:

答案 0 :(得分:0)

通常,当您发布API(例如包含多个过程和函数的包规范)并且它已投入使用时,您已经与其他开发人员签订了合同。

除非绝对必要,否则不应更改这些子程序的签名(更改合同条款)。

替代方案包括:

  • 添加新的IN参数时,请始终将其放在现有参数列表的末尾,并提供反映当前(更改前)行为的默认值。子程序的所有现有调用仍然有效。
  • 如果您要添加OUT或IN OUT参数,请考虑保留当前子程序,而不是添加重载 - 相同的名称,但使用新的扩展参数列表。

这样,现有代码不会失效。然后,您可以通知开发人员新的子程序(更改合同),他们可以选择是否使用它们。

顺便说一句,您可以使用PL / Scope查找特定子程序的所有用法。 LiveSQL.oracle.com提供了许多PL / Scope脚本。只需搜索“范围”。此外,Philipp Salvisberg在Github上提供了一个很棒的PL / Scope实用程序:https://www.salvis.com/blog/2017/03/17/plscope-utils-utilities-for-plscope-in-oracle-database-12-2/

答案 1 :(得分:0)

如果只有少数程序会更新第3条语句,您可以使用参数的默认值。所以你不必更新所有10个程序。

对于前,

CREATE OR REPLACE PROCEDURE PRC_UPD_MYPROCEDURE
( 
   p_ParameterOne IN NUMBER, 
   p_ParameterTwo IN VARCHAR2, 
   p_ParameterThree IN NUMBER DEFAULT NULL,
)

所以当你调用你的程序(没有第三个参数)时,

PRC_UPD_MYPROCEDURE(1234,'EXAMPLE');

有效。