启动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;
);
您不能在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
进行进一步的操作。