我遇到的情况是我有一个从至少3个或4个不同位置调用的Oracle过程。我需要能够根据某些数据调用自定义代码。自定义代码是客户特定的 - 因此,客户A可能想要做A-B-C,其中客户B可能想要做6-7-8而客户C不需要做任何额外的事情。当客户D ... Z出现时,我不想修改我现有的程序。
我希望能够将客户特定的程序输入到表格中。在此现有过程中,检查数据库表是否存在自定义代码过程,如果存在,则执行它。每个客户代码程序都具有相同的参数。
例如:
我知道我可以通过构建包含对存储过程的调用的字符串来完成此操作。但是,我想知道Oracle 10g是否有内置的东西来做这种事情?
答案 0 :(得分:2)
您的每个客户都有自己的数据库吗?如果是这样,最好的选择是使用conditional compilation。这具有不需要动态SQL的优点。让主程序始终调用自定义过程,并使用CC标志来改变它包含的代码。
否则,Oracle确实有一个规则引擎,但它并不适合我们使用。
答案 1 :(得分:2)
我们使用的最终解决方案是将过程的名称存储在数据库表中。然后,我们构建SQL调用并使用EXECUTE语句。
答案 2 :(得分:0)
同意APC的回答,只是为了扩展它,在this白皮书中,如果你寻找“基于组件的安装”,它描述了使用条件编译解决的类似问题。
答案 3 :(得分:0)
根据要求,您的解决方案似乎是合理的,所以我投票了。
另一个选择是循环查看表查找的结果,并调用大案例语句中的过程。这将是更多的代码,但它具有使依赖链可见的优势,因此您可以更轻松地捕获缺少的权限和无效的过程。