SQL 一般:サブクエリのエラーメッセージの変更(保留中)

注意

この動作変更は2026_01バンドルにあります。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

サブクエリのエラーメッセージは以下のように動作します。

変更前:

サブクエリがエラーを返した場合、エラーメッセージには SQL コードまたはオブジェクトに関する特定の情報は含まれません。

変更後:

一部のサブクエリがエラーを返す場合、エラーメッセージには次の詳細などの特定の情報が含まれます。

  • サブクエリ内のサポートされていないコードの行と位置。

  • サポートされていないサブクエリを含むビューや関数などのオブジェクトの名前。オブジェクトがネストされている場合、最も外側のオブジェクトの名前が返されます。たとえば、サポートされていないサブクエリを持つビューがセキュアビューにネストされている場合、エラーメッセージにはセキュアビューの名前が表示されます。

  • サポートされていないサブクエリを含むマスキングポリシーなどオブジェクトの型の名前。

サブクエリに関連するエラーコードの変更はありません。

注釈

この動作変更は、ラテラル結合またはユーザー定義テーブル関数(UDTFs)には適用されません。

以下の例は、サブクエリのエラーメッセージの変更を示しています。

3つのテーブルを作成し、それぞれにデータを挿入します。

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

これらのテーブルは以下の例で使用します。

サポートされていないサブクエリ

エラーを返すサポートされていないサブクエリを実行します。

SELECT *
  FROM testsub1
  WHERE a IN(
    SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
  );
Copy

このクエリは、相関列 a が左結合の ON 句内にあるため、エラーを返します。

動作変更の前に、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

動作変更後、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated at line 4, position 4

サポートされていないサブクエリを含むセキュアビュー

サポートされていないサブクエリを使用してセキュアビューを作成し、ビューをクエリします。

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

動作変更の前に、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

動作変更後、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside VIEW object: SVW

サポートされていないサブクエリを使用したマスキングポリシー

サポートされていないサブクエリを使用してマスキングポリシーを作成し、そのマスキングポリシーを使用するようにテーブルを変更し、テーブルをクエリします。

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

動作変更の前に、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

動作変更後、次のエラーが返されます。

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside MASKING POLICY

参照:2140