2016-09-01 3 views
4
select banner 
from v$version 
; 


BANNER 
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 
PL/SQL Release 12.1.0.2.0 - Production 
"CORE 12.1.0.2.0 Production" 
TNS for Solaris: Version 12.1.0.2.0 - Production 
NLSRTL Version 12.1.0.2.0 - Production 

との12cのリリースで複数の機能、Oracleは、直接SQL文の先頭にPL/SQL関数の宣言を許可する機能を追加しました(https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1を参照)のOracle 12C:SELECTステートメントの句

これは非常に便利な機能です。 SELECTステートメントに限定されたユーザー権限でDBからデータをプルする必要があるプロジェクトでは、

簡単な例:

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select add_string('Yes, it') as outVal 
from dual 
; 

--------- 
OUTVAL 
Yes, it works! 

しかし、まだWITH句で複数機能を含むことができていない。

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
    --  
, function doesnt_it(p_string in varchar2) return varchar2 
    is 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' Doesnt it?'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select add_string('Yes, it') as outVal 
from dual 
; 

ORA-00928: missing SELECT keywordをスロー。 この新しい機能で複数の関数宣言が許可されているかどうかは誰にも分かりますか?もしそうなら、どのように実現できますか?

答えて

3

2番目の機能が動作するには、その前にカンマを削除する必要があります。 私はTOAD、sqlDeveloper、およびsqlPlusでテストしました。

あなたは両方の機能を組み合わせた、このような文を記述する場合:

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
    --  
    function doesnt_it(p_string in varchar2) return varchar2 
    is 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' Doesnt it?'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select doesnt_it(add_string('Yes, it')) as outVal 
from dual 
; 

あなたが取得されます:

OUTVAL 
-------- 
Yes, it works! Doesnt it? 
+0

だから、シンプル!どうもありがとう! :) – silentsurfer

+0

ようこそ。 – abarisone