oracle 12c, использующее предложение факторинга подзапроса с объявлением plsql
Я большой поклонник предложения факторинга подзапроса.
WITH t1 as (select 1 as id from dual)
select * from t1;
и oracle 12c теперь включает в себя раздел объявления PL/SQL в предложении WITH
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;
1 ответ
Решение
Пожалуйста, обратитесь к синтаксису:
https://docs.oracle.com/database/121/SQLRF/statements_10002.htm
Как видите, синтаксис:
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;