sil*_*fer 7 sql oracle oracle12c
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
Run Code Online (Sandbox Code Playgroud)
在其12c版本中,Oracle添加了允许直接在SQL语句顶部声明Pl / SQL函数的功能(请参阅https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1)
特别是,这可能是一个非常方便的功能。在需要从用户权限限制为SELECT语句的数据库中提取数据的项目上。
一个简单的例子:
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!
Run Code Online (Sandbox Code Playgroud)
但是,我尚未能够在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
;
Run Code Online (Sandbox Code Playgroud)
抛出ORA-00928: missing SELECT keyword。是否有人知道此新功能是否允许使用多个函数声明,如果允许,如何实现?
您必须在第二个函数之前删除逗号才能使其工作。我用 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
;
Run Code Online (Sandbox Code Playgroud)
你将获得:
OUTVAL
--------
Yes, it works! Doesnt it?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3126 次 |
| 最近记录: |