SQL 一般:サブクエリのエラーメッセージの変更(保留中)¶
サブクエリのエラーメッセージは以下のように動作します。
- 変更前:
サブクエリがエラーを返した場合、エラーメッセージには 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);
これらのテーブルは以下の例で使用します。
サポートされていないサブクエリ¶
エラーを返すサポートされていないサブクエリを実行します。
SELECT *
FROM testsub1
WHERE a IN(
SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
);
このクエリは、相関列 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;
動作変更の前に、次のエラーが返されます。
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;
動作変更の前に、次のエラーが返されます。
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