1

我有一种情况,我有一个从至少 3 或 4 个不同的地方调用的 Oracle 过程。我需要能够根据某些数据调用自定义代码。自定义代码是特定于客户的 - 因此,客户 A 可能想要执行 ABC,而客户 B 可能想要执行 6-7-8 而客户 C 不需要做任何额外的事情。当客户 D...Z 出现时,我不想修改我现有的程序。

我希望能够将客户特定的程序输入到表格中。在此现有过程中,检查该数据库表是否存在自定义代码过程,如果存在,则执行它。每个客户代码过程都将具有相同的参数。

例如:

  1. 我的应用程序(3 个以上的地方)将此称为“删除”程序
  2. 在这个删除过程中,查找要调用的子过程的名称(如果存在的话)
  3. 如果存在,则执行该删除过程(传入参数)

我知道我可以通过构建一个包含对存储过程的调用的字符串来做到这一点。但是,我想知道 Oracle 10g 是否有内置的东西来做这种事情?

4

4 回答 4

2

您的每个客户都有自己的数据库吗?如果是这样,最好的选择是使用条件编译。这样做的好处是不需要动态 SQL。让主程序始终调用自定义过程,并使用 CC 标志来改变它包含的代码。

否则,Oracle 确实有一个规则引擎,但它并不是真正供我们使用的。

于 2009-09-01T06:31:04.327 回答
2

我们采用的最终解决方案是将过程的名称存储在数据库表中。然后我们构建 SQL 调用并使用 EXECUTE 语句。

于 2009-09-14T17:04:15.423 回答
0

同意 APC 的回答,只是为了扩展它,在白皮书中,如果您查找“基于组件的安装”,它描述了通过使用条件编译解决的类似问题。

于 2009-09-01T06:59:06.297 回答
0

考虑到要求,您的解决方案似乎是合理的,所以我投了赞成票。

另一种选择是循环遍历表查找的结果,并将对过程的调用放在一个大的 case 语句中。这将是更多的代码,但它具有使依赖链可见的优势,因此您可以更轻松地捕获丢失的权限和无效的过程。

于 2010-01-14T03:09:33.703 回答