例: 外部UDF - Teradata Database - Teradata Vantage NewSQL Engine - 例: 外部UDF、WITH修飾子

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/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

以下の例では、WITH修飾子に、スカラーまたはテーブル外部UDFを指定する方法を示します。

このリクエストでは、外部UDFへの入力は再帰的であり、UDFは再帰的問合わせと結合されます。

     WITH RECURSIVE dt(a,b,c,d) AS (
       SELECT a1, b1,a1-b1,0
       FROM t1
     UNION ALL
       SELECT addend1, addend2, mysum,d+1
       FROM dt,table (add2int(dt.a,dt.b)) AS tf
       WHERE d < 2
       )
     SELECT *
     FROM dt;

この文では、外部UDFへの入力は再帰的ではなく、UDFは再帰的問合わせと結合されます。

     WITH RECURSIVE dt(a,b,c,d) AS (
       SELECT a1, b1,a1-b1,0
       FROM t1
     UNION ALL
       SELECT addend1, addend2, mysum,d+1
       FROM dt,table (add2int(t1.a1,t1.b1)) AS tf
       WHERE d < 2
       )
     SELECT *
     FROM dt;

この文では、外部UDFへの入力は再帰的であり、UDFは再帰的問合わせと結合されません。

     WITH RECURSIVE dt(a,b,c,d) AS (
       SELECT a1, b1,a1-b1,0
       FROM t1
     UNION ALL
       SELECT addend1, r.b1, mysum, 1 AS d
       FROM table (add2int(dt.a,dt.b)) tf, t1 r
       WHERE d < 1
       AND   tf.addend1=t1.a1
       )
     SELECT *
     FROM dt;

この文では、外部UDFへの入力は再帰的ではなく、UDFは再帰的問合わせと結合されません。

     WITH dt(a,b,c) AS (
       SELECT a1, b1 ,a1-b1
       FROM t1
     UNION ALL
       SELECT addend1, addend2, mysum
       FROM table (add2int(t1.a1, t1.b1)) tf
       )
     SELECT *
     FROM dt;

例: 再帰的問合わせでのSQL UDFの呼び出し

この例では、再帰的問合わせのWHERE句で、SQL UDFのvalue_expressionを呼び出します。

     WITH RECURSIVE temp_table (employee_number) AS (
       SELECT root.employee_number
       FROM employee AS root
       WHERE root.manager_employee_number = 801
       AND   test.value_expression(dept_no, 0) = 25;
     UNION ALL
       SELECT indirect.employee_number
       FROM temp_table AS direct, employee AS indirect
       WHERE direct.employee_number = indirect.manager_employee_number
       AND   test.value_expression(2,3) = 5
       )
     SELECT *
     FROM temp_table
     ORDER BY employee_number;