Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从查询创建PL/SQL函数_Html_Sql_Oracle_Function_Plsql - Fatal编程技术网

Html 从查询创建PL/SQL函数

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>

这里对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>'||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'));