我们可以在内部select中的WITH子句中使用PLSQL函数吗?

问题描述 投票:0回答:1

启动12c oracle提供了一种在SQL查询的WITH子句中定义函数的方法。

但是对于下面的示例查询模板,它将失败。有什么办法可以做到这一点?当我们按照以下格式创建视图时。

SELECT * FROM ( 
WITH FUNCTION 
FUNCTION_NAME 
RETURN DATE
IS
DATE_V DATE;
BEGIN
SELECT SOMEDATE INTO 
DATE_V 
FROM SOMETABLE;
RETURN DATE_V;
END;
SELECT FUNCTION_NAME FROM 
DUAL;
);
sql view oracle12c
1个回答
0
投票

您不能在WITH FUNCTION语句中使用SELECT。以下内容可能对您有帮助:

SET SERVEROUTPUT ON
DECLARE
  l_sql     VARCHAR2(32767);
  l_cursor  SYS_REFCURSOR;
  l_value   NUMBER;
BEGIN
  l_sql := 'WITH
              FUNCTION test(p_id IN NUMBER) RETURN NUMBER IS
              BEGIN
                RETURN p_id;
              END;
            SELECT test(1)
            FROM   dual';
  OPEN l_cursor FOR l_sql;
  FETCH l_cursor INTO l_value;
  DBMS_OUTPUT.put_line('l_value=' || l_value);
  CLOSE l_cursor;
END;
/

然后您可以使用l_value进行进一步的操作。

© www.soinside.com 2019 - 2024. All rights reserved.