Função SYSTEM$REFERENCE: falha na criação de uma referência com tipos de objetos incompatíveis¶
Atenção
Essa mudança de comportamento está no pacote 2023_08.
Para saber o status atual do pacote, consulte Histórico do pacote.
Você pode criar uma referência para um objeto usando a função SYSTEM$REFERENCE. Uma referência autoriza o acesso de um objeto a um procedimento armazenado, instância de classe ou aplicativo que de outra forma não poderia acessar o objeto. A referência é passada como um identificador para um procedimento armazenado de direitos do proprietário, instância de classe ou aplicativo com privilégios específicos e limitados em um objeto.
O argumento object_type
da função SYSTEM$REFERENCE deve corresponder ao tipo de objeto identificado pela referência. No exemplo a seguir, t1
é uma tabela e corresponde ao tipo de objeto TABLE:
SELECT SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'SELECT');
A função SYSTEM$REFERENCE se comporta da seguinte forma:
- Antes da mudança:
Se você criar uma referência usando a função SYSTEM$REFERENCE e o argumento
object_type
for TABLE, e o nome do objeto for resolvido para qualquer tipo de objeto semelhante a uma tabela (ou seja, TABLE, VIEW, EXTERNAL TABLE ou MATERIALIZED VIEW), a função é bem-sucedida.- Após a mudança:
Se você tentar criar uma referência usando a função SYSTEM$REFERENCE e o argumento
object_type
for TABLE, mas o nome do objeto for resolvido para um tipo de objeto semelhante a uma tabela diferente de TABLE (ou seja, VIEW, EXTERNAL TABLE ou MATERIALIZED VIEW), a função falha.Por exemplo, se você usar o tipo de objeto TABLE para a exibição
v1
com a seguinte instrução:SELECT SYSTEM$REFERENCE('TABLE', 'v1', 'SESSION', 'SELECT');
A instrução resulta no seguinte erro:
505028 (42601): Object type VIEW does not match the specified type TABLE for reference creation
Ref: 1315