oracle包package內建管道函式pipelined、過程procedure和函式function的程式碼
阿新 • • 發佈:2019-02-03
包內建管道函式為本人試過很多次才試出來的,網上雖然好多相關的解答但都不準確。
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 istype 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;