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