view_name - Teradata Database - Teradata Vantage NewSQL Engine - view_nameオプション、CREATE REPLACE RECURSIVE VIEW SQL文

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

作成または置換される再帰的ビューの名前。

データベース オブジェクトの命名ルールについては、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。

view_nameが完全に修飾されていない場合、デフォルトのデータベースが使用されます。

database_name
user_name
view_nameを含むデータベースまたはユーザー(現在のデータベースまたはユーザー以外の場合)。
column_name
ビュー列または列セットの必須の名前。複数の列を指定する場合には、それぞれがビュー用に表示される順序で、名前を列挙します。
AS
このキーワードの後にビュー定義が続くことを指定します。

例: 単純再帰的ビュー

この例は、次の基本テーブルをその基本として使用して、永久再帰処理の可能性を制御するカウンターを持つ単純再帰的レビュー定義を構築します。

Partlist
Part Subpart Quantity
00 01 5
00 05 3
01 02 2
01 03 3
01 04 4
02 05 7
02 06 6

このビューは、次のような質問に回答するために設計されています。部品01を構築するにはどの部品が必要でしょうか。

この定義で記されているとおり、データの中には100を超えるレベルが存在する可能性があるため、実際にはこの問合わせによって質問の回答は得られません。厳密に言うと、このリクエストが尋ねているのは次の質問です。部品01を構築するには、最大100のレベルがある中で、どの部品が必要でしょうか。

再帰的ビュー定義は、次のようになります。

    CREATE RECURSIVE VIEW rpl (part, subpart, quantity, depth) AS (
      SELECT root.part, root.subpart, root.quantity, 0 AS depth
      FROM partlist AS root
      WHERE root.part = '01'
    UNION ALL
      SELECT child.part, child.subpart, child.quantity, parent.depth + 1
      FROM rpl AS parent, partlist AS child
      WHERE parent.subpart = child.part
      AND   parent.depth <= 100);

部品01を構築するにはどの部品が必要かという質問に答える問合わせが、次のSELECTリクエストです。

    SELECT part, subpart, quantity
    FROM rpl
    ORDER BY part, subpart, quantity;

この問合わせの結果セットは次のとおりです。

Part Subpart Quantity
01 02 2
01 03 3
01 04 4
02 05 7
02 06 6

例: 単純なREPLACE RECURSIVE VIEW

次の例は、recという名前の再帰的ビューの既存の定義を指定のSQLコードで置換しています。

    REPLACE RECURSIVE VIEW rec(p, mycount) AS (
      SELECT n, 0 AS mycount
      FROM t
      WHERE n = 1
    UNION ALL
      SELECT rec.p, rec.mycount + 1
      FROM t, rec
      WHERE rec.p = t.n
      AND   rec.mycount <= 20