1. 程式人生 > >oracle包package內建管道函式pipelined、過程procedure和函式function的程式碼

oracle包package內建管道函式pipelined、過程procedure和函式function的程式碼

包內建管道函式為本人試過很多次才試出來的,網上雖然好多相關的解答但都不準確。

1、首先建一個object物件,裡面的引數型別要規定長度的,varchar2和number理論上可以不規定使用預設的

create or replace type ty_obj is object(

       pname varchar2(200),
       newsal number(6)     

);

2、建包規範spec,內部引用剛才建好的object物件,並且定義一個管道函式(內部的變數之規定型別,不加長度)

CREATE OR REPLACE PACKAGE pkg is  
    type ta_obj is table of ty_obj;
    function fun_pkg (
             ipname varchar2,
             inewsal number
    ) return ta_obj pipelined;
END pkg;  

3、建包體body,實現剛才的管道函式
create or replace package body pkg is
function  fun_pkg (
       ipname varchar2,
       inewsal number   

) return ta_obj pipelined is

pname varchar2(200),
newsal number(6) 
begin
 for loop
  pipe row(ty_obj('pname','soctt'));
  pipe row(ty_obj(newsal,120)) ;
 end loop;

 return;

end;

end;  

建立函式和儲存過程

create or replace package pkg is

function fun_name(引數名1  引數型別,引數名2  引數型別,····) return 返回值型別;

procedure pro_name(引數名1  引數型別,引數名2  引數型別,····) ;

end;

create or replace package body pkg is

function fun_name(引數名1  引數型別,引數名2  引數型別,····) return 返回值型別 is

定義變數(引數型別要規定長度)

begin

執行過程

return 定義變數名(注意型別與返回型別對應)

end fun_name;

procedure pro_name(引數名1  引數型別,引數名2  引數型別,····) is

定義變數(引數型別要規定長度)

begin

執行過程

end pro_name;

end pkg;