SQL geral: alterações nas mensagens de erro de subconsultas (pendente)¶
Atenção
Esta mudança de comportamento faz parte do pacote 2026_01.
Para saber o status atual do pacote, consulte Histórico do pacote.
As mensagens de erro de subconsultas têm o seguinte comportamento:
- Antes da mudança:
Quando uma subconsulta retorna um erro, a mensagem de erro não contém informações específicas sobre o código SQL ou o objeto.
- Após a mudança:
Quando algumas subconsultas retornam um erro, a mensagem de erro contém informações específicas, como os seguintes detalhes:
A linha e a posição do código incompatível na subconsulta.
O nome do objeto, como uma exibição ou função, que contém a subconsulta incompatível. Quando os objetos são aninhados, o nome do objeto mais externo é retornado. Por exemplo, se uma exibição com uma subconsulta incompatível está aninhada em uma exibição segura, a mensagem de erro mostra o nome da exibição segura.
O nome do tipo de objeto, como uma política de mascaramento, que contém a subconsulta incompatível.
Não há alterações nos códigos de erro relacionados a subconsultas.
Nota
Essa mudança de comportamento não se aplica a subconsultas em junções laterais ou funções de tabela definidas pelo usuário (User-Defined Table Functions, UDTFs).
Exemplos¶
Os exemplos a seguir mostram alterações nas mensagens de erro de subconsultas.
Crie três tabelas e insira dados em cada uma delas:
CREATE TABLE testsub1(a INT, b INT)
AS SELECT * FROM VALUES
(1, 1),
(2, 2),
(NULL, NULL);
CREATE TABLE testsub2(x INT, y INT)
AS SELECT * FROM VALUES
(1, 1),
(2, 2),
(NULL, NULL);
CREATE TABLE testsub3(u INT, v INT)
AS SELECT * FROM VALUES
(1, 1),
(2, 2),
(NULL, NULL);
Essas tabelas são usadas nos exemplos a seguir:
Subconsulta incompatível¶
Execute uma subconsulta incompatível que retorna um erro:
SELECT *
FROM testsub1
WHERE a IN(
SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
);
Essa consulta retorna um erro porque a coluna correlacionada a está na cláusula ON de uma junção esquerda.
Antes da mudança de comportamento, o seguinte erro era retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Após a mudança de comportamento, o seguinte erro é retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated at line 4, position 4
Exibição segura com uma subconsulta incompatível¶
Crie uma exibição segura com uma subconsulta incompatível e consulte a exibição:
CREATE SECURE VIEW svw
AS SELECT *
FROM testsub1
WHERE a IN (
SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u);
SELECT * FROM svw;
Antes da mudança de comportamento, o seguinte erro era retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Após a mudança de comportamento, o seguinte erro é retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside VIEW object: SVW
Política de mascaramento com uma subconsulta incompatível¶
Crie uma política de mascaramento com uma subconsulta incompatível, altere uma tabela para usar a política de mascaramento e consulte a tabela:
CREATE MASKING POLICY mp AS
(i INT) RETURNS INT -> IFF(i < (SELECT MAX(a) FROM svw), i, -1);
CREATE TABLE masked_testsub1(a INT, b INT)
AS SELECT * FROM VALUES
(1, 1),
(2, 2),
(NULL, NULL);
ALTER TABLE masked_testsub1
ALTER COLUMN a SET MASKING POLICY mp;
SELECT * FROM masked_testsub1;
Antes da mudança de comportamento, o seguinte erro era retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Após a mudança de comportamento, o seguinte erro é retornado:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside MASKING POLICY
Ref: 2140