Html 从查询创建PL/SQL函数
这里对PL/SQL知之甚少,因此需要一些帮助 我有一个需要转换为函数的查询(我们称之为reject_list),但不确定如何执行。这就是我到目前为止所做的:Html 从查询创建PL/SQL函数,html,sql,oracle,function,plsql,Html,Sql,Oracle,Function,Plsql,这里对PL/SQL知之甚少,因此需要一些帮助 我有一个需要转换为函数的查询(我们称之为reject_list),但不确定如何执行。这就是我到目前为止所做的: create or replace function reject_list(ayrc in varchar2,mcrc in varchar2) return string begin select distinct '<tr><td>'||cap.cap_uci2||'</td> <td>
create or replace function reject_list(ayrc in varchar2,mcrc in varchar2)
return string
begin
select distinct
'<tr><td>'||cap.cap_uci2||'</td>
<td>'||cap.cap_stuc||'</td>
<td>'||cap.cap_mcrc||'</td>
<td>'||cap.cap_ayrc||'</td>
<td>'||stu.stu_fnm1||'</td>
<td>'||stu.stu_surn||'</td>
<td>'||cap.cap_stac||'</td>
<td>'||cap.cap_crtd||'</td></tr>'
from
intuit.srs_cap cap
,intuit.ins_stu stu
,intuit.srs_apf apf
where
cap.cap_stuc = stu.stu_code
and cap.cap_apfs = apf.apf_seqn
and cap.cap_stuc = apf.apf_stuc
and cap.cap_mcrc = &mcrc
and cap.cap_ayrc = &ayrc
and cap.cap_idrc in ('R','CR','CFR')
and apf.apf_recd <= to_date('1501'||substr(&ayrc,1,4),'DDMMYYYY');
end;
创建或替换函数拒绝列表(varchar2中的ayrc,varchar2中的mcrc)
返回字符串
开始
选择不同的
“| | cap.cap|uci2 | |”
“| | cap.cap|stuc |”
“| | cap.cap|mcrc | |”
“| | cap.cap| | |”
| | stu.stu|fnm1 | |
| |斯图。斯图苏恩| | |
“| | cap.cap|stac |”
“| | cap.cap|crtd |”
从…起
intuit.srs_盖
,intuit.ins_stu stu
,intuit.srs_apf apf
哪里
cap.cap_stuc=stu.stu代码
和cap.cap_apfs=apf.apf_seqn
和cap.cap_stuc=apf.apf_stuc
和cap.cap_mcrc=&mcrc
和cap.cap_ayrc=&ayrc
以及“R”、“CR”和“CFR”中的第1章
和apf.apf_recd您可能必须使用光标循环查看select语句的结果。请考虑以下代码作为指南。另外,请考虑用Py或类似的方法对函数参数进行前缀。这将使它们更容易在代码中被发现
FUNCTION YOUR_FUNCTION(p_ayrc in varchar2,p_mcrc in varchar2)
RETURN SYS_REFCURSOR
IS
THE_RESULT SYS_REFCURSOR;
BEGIN
OPEN THE_RESULT FOR
select distinct
cap.cap_uci2
,cap.cap_stuc
,cap.cap_mcrc
,cap.cap_ayrc
,stu.stu_fnm1
,stu.stu_surn
,cap.cap_stac
,cap.cap_crtd
from
intuit.srs_cap cap
,intuit.ins_stu stu
,intuit.srs_apf apf
where
cap.cap_stuc = stu.stu_code
and cap.cap_apfs = apf.apf_seqn
and cap.cap_stuc = apf.apf_stuc
and cap.cap_mcrc = p_mcrc
and cap.cap_ayrc = p_ayrc
and cap.cap_idrc in ('R','CR','CFR')
and apf.apf_recd <= to_date('1501'||substr(&ayrc,1,4),'DDMMYYYY');
RETURN THE_RESULT;
END;
FUNCTION您的函数(varchar2中的p_ayrc,varchar2中的p_mcrc)
返回系统参考光标
是
_RESULT SYS_REFCURSOR;
开始
打开\u结果以查看
选择不同的
第2章
,cap.cap_stuc
,cap.cap_mcrc
,cap.cap_ayrc
,stu.stu_fnm1
,斯图·斯图苏恩
,cap.cap_stac
,cap.cap_crtd
从…起
intuit.srs_盖
,intuit.ins_stu stu
,intuit.srs_apf apf
哪里
cap.cap_stuc=stu.stu代码
和cap.cap_apfs=apf.apf_seqn
和cap.cap_stuc=apf.apf_stuc
和cap.cap_mcrc=p_mcrc
和cap.cap_ayrc=p_ayrc
以及“R”、“CR”和“CFR”中的第1章
和apf.apf_recd尝试类似的方法(您只需更改列的类型varchar(256)
):
你想返回一个光标,不是吗?关于你的问题有很多不清楚的地方。您希望函数返回什么?(string
至少在Oracle中不是有效的SQL类型。)为什么需要将查询转换为函数?(如果只是为了能够在多个位置使用同一查询而不重复它,您最好使用视图。)在SQL Server中,存储函数可以返回选择查询的结果-您是否在寻找与此类似的Oracle?请参阅我上面所做的编辑。我一开始写这篇文章有点匆忙,因此缺乏信息,但如果还有什么需要澄清的,请告诉我。@LukeWoodward-STRING在Oracle中完全有效。在SYS.STANDARD中定义为子类型字符串为VARCHAR2代码>。分享并享受。@BobJarvis:谢谢,我不知道。好的,我想我现在理解了游标的概念,但不确定如何实现它们,而且这句话仍然没有运行。还有什么建议吗?
create type t_row as object
(
cap_uci2 varchar(256)
, cap.cap_stuc varchar(256)
, cap.cap_mcrc varchar(256)
, cap.cap_ayrc varchar(256)
, stu.stu_fnm1 varchar(256)
, stu.stu_surn varchar(256)
, cap.cap_stac varchar(256)
, cap.cap_crtd varchar(256)
);
/
create type t_tab is table of t_row;
/
create or replace function reject_list(ayrc varchar2, mcrc varchar2)
return t_tab pipelined
begin
for cur in
(
select distinct
cap.cap_uci2
, cap.cap_stuc
, cap.cap_mcrc
, cap.cap_ayrc
, stu.stu_fnm1
, stu.stu_surn
, cap.cap_stac
, cap.cap_crtd
from intuit.srs_cap cap
, intuit.ins_stu stu
, intuit.srs_apf apf
where cap.cap_stuc = stu.stu_code
and cap.cap_apfs = apf.apf_seqn
and cap.cap_stuc = apf.apf_stuc
and cap.cap_mcrc = mcrc
and cap.cap_ayrc = ayrc
and cap.cap_idrc in ('R', 'CR', 'CFR')
and apf.apf_recd <= to_date ('1501' || substr(ayrc, 1, 4), 'DDMMYYYY')
)
loop
pipe row(cur);
end loop;
end;
/
select *
from table(reject_list('xxx', 'yyy'));