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');
Copy

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');
Copy

A instrução resulta no seguinte erro:

505028 (42601): Object type VIEW does not match the specified type TABLE for reference creation

Ref: 1315