Estou desenvolvendo um aplicativo Apex que usa contextos de banco de dados em conjunto com segurança de nível de linha. Gostaria de instalar uma segunda cópia do esquema e do espaço de trabalho na mesma instância; isso funciona, exceto para o Contexto, que é uma coisa global.
Por exemplo, no esquema "DEV", crio o contexto:
CREATE OR REPLACE CONTEXT myapp_ctx USING myapp_pkg;
Quando eu consulto dba_context
, vejo que meu contexto foi criado:
NAMESPACE SCHEMA PACKAGE TYPE
========= ====== ========= ================
MYAPP_CTX DEV MYAPP_PKG ACCESSED LOCALLY
No schema "TEST", crio o contexto como antes:
CREATE OR REPLACE CONTEXT myapp_ctx USING myapp_pkg;
Isso tem o efeito de remover o contexto de desenvolvimento e substituí-lo pelo de teste:
NAMESPACE SCHEMA PACKAGE TYPE
========= ====== ========= ================
MYAPP_CTX TEST MYAPP_PKG ACCESSED LOCALLY
Eu tenho o nome do contexto codificado em várias partes do aplicativo (por exemplo, exibições, pacotes, etc) e prefiro que ele não seja diferente entre os ambientes se eu puder ajudar.
No momento, minha única ideia é parametrizar o nome do namespace nos scripts de implantação - para que o namespace seja, por exemplo, MYAPP_CTX_DEV
ou MYAPP_CTX_TEST
dependendo de uma opção de configuração nos scripts de implantação.
Existem alternativas melhores que me permitem instalar várias versões do meu aplicativo em uma única instância?
Oracle versão 11.1.0.7
Você poderia encapsular a lógica nos próprios pacotes:
Vamos criar o contexto e chamá-lo de: