oracle自定義函數返回結果集


首先要弄兩個type,不知道什么鬼:

1.

create or replace type obj_table as object
(
  id varchar2(38),
  name varchar2(4000),
  count varchar2(10)
)

2.

create or replace type t_table is table of obj_table

函數體:

create or replace function getStationListTb(s number)
return t_table
as
    rs t_table:= t_table();
    str varchar2(4000);
    i number := 0;
begin
    for c in (select DepartmentId from sys_department) loop
    str := '';
    i := 0;
    for c2 in (select t2.name from sys_departmentstation t1
               left join bsd_station t2 on t1.stationid=t2.stationid where t1.DepartmentId=c.departmentid) loop
      str := str || '<span class="btn btn-defaut select-btn select-site-wrap" title="' || c2.name ||  '">' || c2.name ||  '</span>';
      i := i + 1;
    end loop;
    str := substr(str,0,length(str)-1);
    rs.extend;
    rs(rs.count) := obj_table(c.departmentid,str,to_char(i));
  end loop;
return rs;
end getStationListTb;

好奇怪的,這個函數我不定義參數它就出錯,稍微哪里寫錯一點東西,就報錯,又沒提示哪里錯,感覺好難寫的;這次難得寫成功了,趕緊記錄下來,下次直接過來copy。

調用:

select * from table(getStationListTb(1))

那么,這個函數出來就是一張表了,可以把它看成表去使用:

SELECT t1.*,t2.name StationList,t2.count StationCount FROM SYS_Department t1
      left join (select * from table(getStationListTb(1))) t2 on t1.DepartmentId=t2.id
      WHERE 1=1

先前還寫了個按照ID去獲取每行數據的:

create or replace function getStationList(DepartmentId  VARCHAR2) return VARCHAR2
    as
      --定義變量
      resultStr VARCHAR2(8000);
    begin
      for c in (select stationid
                  from sys_departmentstation
                  where DepartmentId=DepartmentId) loop
           resultStr := resultStr || c.stationid || ',';
       end loop;
      return substr(resultStr,0,length(resultStr)-1);
    end getStationList;

想這樣直接根據ID關聯數據:

SELECT t1.*,getStationList(t1.DepartmentId) StationList FROM SYS_Department t1

結果出來呵呵的,完全不像sql那樣會根據每行的DepartmentId去傳參執行getStationList(DepartmentId VARCHAR2)函數,而是一直使用第一行的DepartmentId進行傳參:

呵呵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM