17.10 - 例: 外部UDF - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-171K-JPN
Language
日本語 (日本)

以下の例では、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;