【问题标题】:oracle 12c using subquery factoring clause with plsql declarationoracle 12c 使用带有 plsql 声明的子查询因式分解子句
【发布时间】:2016-07-06 17:57:23
【问题描述】:

我是子查询分解子句的忠实粉丝。

WITH t1 as (select 1 as id from dual)
select * from t1;

oracle 12c 现在在 WITH 子句中包含一个 PL/SQL 声明部分

WITH
  FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN p_id;
  END;
SELECT with_function(id)
FROM   t1
WHERE  rownum = 1

但我似乎无法让他们一起工作,这可能吗?

WITH t1 as (select 1 as id from dual)
WITH  FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN p_id;
  END;
SELECT with_function(id)
FROM   t1
WHERE  rownum = 1;

【问题讨论】:

    标签: oracle oracle12c subquery-factoring


    【解决方案1】:

    请参考语法:
    https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702

    plsql_declarations

    subquery_factoring_clause

    如您所见,语法是:

    WITH [ plsql_declarations ] [ subquery_factoring_clause ]
    

    这意味着必须先执行 PL/SQL,然后执行其余的 SQL 查询,这样:

    WITH 
      FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
      BEGIN
        RETURN p_id;
      END;
    t1 as (select 1 as id from dual)
    SELECT with_function(id)
    FROM   t1
    WHERE  rownum = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      相关资源
      最近更新 更多