Oracle的函數返回表類型(轉)


在SQL Server中有表變量,可以在function中方便地返回,習慣SQL Server或者需要把腳本從SQL Server轉到Oracle中的朋友可以都會碰到這個問題.

Oracle的function中怎么返回表變量?

1、創建表對象類型。

在Oracle中想要返回表對象,必須自定義一個表類型,如下所示:

create or replace type t_table is table of number;

上面的類型定義好后,在function使用可用返回一列的表,如果需要多列的話,需要先定義一個對象類型。然后把對象類型替換上面語句中的number;

定義對象類型:

create or replace type obj_table as object
(
  id int,
  name varchar2(50)
)

修改表對象類型的定義語句如下:

create or replace type t_table is table of obj_table;

 

2、 創建演示函數

在函數的定義中,可以使用管道化表函數和普通的方式,下面提供兩種使用方式的代碼:

1)、管道化表函數方式:

create or replace function f_pipe(s number)
return t_table pipelined
as
    v_obj_table obj_table;   
begin    
for i in 1..s loop 
    v_obj_table :=  obj_table(i,to_char(i*i));
    pipe   row(v_obj_table);   
end loop;
return;
end f_pipe;

注意:管道的方式必須使用空的return表示結束.

調用函數的方式如下:

select * from table(f_pipe(5));

 

2)、 普通的方式:

create or replace function f_normal(s number)
return t_table
as
    rs t_table:= t_table();
begin
    for i in 1..s loop
        rs.extend;
        rs(rs.count) := obj_table(rs.count,'name'||to_char(rs.count));
        --rs(rs.count).name := rs(rs.count).name || 'xxxx';
    end loop;
return rs;
end f_normal;

初始化值后還可以想注視行那樣進行修改.

調用方式如下:

select * from table(f_normal(5));

 

 

 


免責聲明!

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



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