首页 文章

公共表表达式,用于定义游标中的函数

提问于
浏览
-1

有人知道是否可以使用在PL / SQL游标中定义局部函数的公用表表达式?

例如,此代码为我产生错误:

DECLARE
  CURSOR LV_CUR IS
  WITH  function fct2(x number) return number is 
    begin
     return 2*x;
    end;
   TEMP_AV AS
    (
      SELECT
        fct2(LEVEL)
      FROM
       DUAL
        CONNECT BY LEVEL < 10
    )
SELECT
  *
FROM
  TEMP_AV;
BEGIN
  FOR I IN LV_CUR
  LOOP
    NULL;
    dbms_output.put_line(i.level);
  END LOOP;
END;

错误是:

ORA-06550:Ligne 3,colonne 18:PL / SQL:ORA-00905:mot-clé缺席ORA-06550:Ligne 3,colonne 3:PL / SQL:SQL语句忽略ORA-06550:Ligne 6,colonne 5: PLS-00103:当期望以下之一时遇到符号“END”:begin function pragma procedure子类型当前游标删除存在之前

我能够在PL / SQL之外执行查询(使用包含函数定义的公用表表达式) .

1 回答

  • 1

    是的,不是 . The 12.1 docs for the CURSOR statement明确说:

    select_statement的限制此select_statement不能包含WITH子句 .

    在这种情况下,这个文档是错误的,因为你可以有一个WITH子句,它显然不能在其中有新的12c PL / SQL声明 . 例如,这个块工作正常 .

    DECLARE
      CURSOR LV_CUR IS
      WITH  
       TEMP_AV AS
        (
          SELECT
            level
          FROM
           DUAL
            CONNECT BY LEVEL < 10
        )
      SELECT
        *
      FROM
        TEMP_AV;
    BEGIN
      FOR I IN LV_CUR
      LOOP
        NULL;
        dbms_output.put_line(i.level);
      END LOOP;
    END;
    /
    

相关问题