Oracle

在 db<>fiddle 中使用內聯函式創建視圖

  • December 8, 2021

我正在嘗試在 db<>fiddle 中使用 inline 函式創建視圖。

我現在已經刪除了 CREATE VIEW 部分,我只是想執行查詢,只是為了解決根本問題。

select  /*+ WITH_PLSQL */ calc from
(
with
function calculator (m number, r number) return number
is begin
return m * r;
end calculator;
select calculator(3, 2) as calc from dual
);
/

來源:選擇子查詢或創建視圖中的內聯函式

當我在db<>fiddle中執行該程式碼時,出現錯誤:

ORA-00905: missing keyword

我究竟做錯了什麼?

什麼地方出了錯

  1. 該功能在 11.2 中不存在
  2. 您使用了問題 SQL,而不是答案 SQL

更正

我的回答是一樣的。在最外面的WITH語句中定義它。

with
function calculator (m number, r number) return number
is begin
return m * r;
end calculator;
select calculator(3, 2) as calc from dual

以@Michael Kutz 的回答為基礎:

以下似乎適用於 db<>fiddle 的Oracle 18c版本。

(我認為 12c 及更高版本支持內聯函式):

create or replace view v1 as (
select /*+ WITH_PLSQL */  calc from
(
with
function calculator (m number, r number) return number
is begin
return m * r;
end calculator;
select calculator(3, 2) as calc from dual
)
)

db<>小提琴


編輯:

不幸的是,任何引用該視圖的查詢都需要/*+ WITH_PLSQL */ 在其中包含選擇提示:

select /*+ WITH_PLSQL */  
   *
from
   v1

這對我來說是一個交易破壞者。將使用視圖的系統是 COTS 系統。我無法將提示添加到將引用視圖的查詢中。

引用自:https://dba.stackexchange.com/questions/303602