我正在开发一个 Apex 应用程序,该应用程序将数据库上下文与行级安全性结合使用。我想在同一实例上安装架构和工作区的第二个副本;这适用于上下文,这是一个全局的东西。
例如,在模式“DEV”中,我创建了上下文:
CREATE OR REPLACE CONTEXT myapp_ctx USING myapp_pkg;
当我查询时dba_context
,我看到我的上下文已经创建:
NAMESPACE SCHEMA PACKAGE TYPE
========= ====== ========= ================
MYAPP_CTX DEV MYAPP_PKG ACCESSED LOCALLY
在模式“TEST”中,我像以前一样创建上下文:
CREATE OR REPLACE CONTEXT myapp_ctx USING myapp_pkg;
这具有删除开发上下文并将其替换为测试上下文的效果:
NAMESPACE SCHEMA PACKAGE TYPE
========= ====== ========= ================
MYAPP_CTX TEST MYAPP_PKG ACCESSED LOCALLY
我已经在应用程序的各个部分(例如视图、包等)中硬编码了上下文名称,如果可以的话,我宁愿它在环境之间没有区别。
目前我唯一的想法是在部署脚本中参数化命名空间名称——这样命名空间将是 egMYAPP_CTX_DEV
或MYAPP_CTX_TEST
取决于部署脚本中的配置选项。
有没有更好的替代方案可以让我在一个实例上安装多个版本的应用程序?
甲骨文版本 11.1.0.7
您可以将逻辑封装到包本身中:
让我们创建上下文并调用它: