本文中的示例主要是解決在函數間不能傳遞多個(32個以上)參數的問題,解題的具體思路就是采用記錄類型作為函數的輸入和返回值,所以我們需要先定義一個視圖,把它作為一個結構類型,函數的輸入和輸出就用它作為數據類型,但是在研究過程中存在record類型不能直接作為函數的參數傳入參數,所以我們需要建立一個函數test_rec3,這個函數的主要功能就是返回一個test_vIEw形式的record結構,這樣在 test_rec2中將test_rec3的結果作為參數傳入,可以避免在直接傳入record類型變量的時候的錯誤,在test_rec2中,又可以給其他傳入參數的其他屬性賦值,這樣可以多建幾個類似test_rec2的函數,完成對傳入闡述的賦值,最後在test_rec1中賦值給一個record 類型變量,這樣test_rec2的返回值可以作為其他函數輸入,而且這個輸入的變量相當於一個結構,雖然它是一個變量,但卻包含了多個變量的信息,從而實現了向一個函數中輸入操作系統限制數量的參數(32個) 。
以下為引用的內容:
create view test_vIEw (p1,p2) as select cast(null as int),cast(null asint)
create or replace function test_rec1(int,int) returns test_vIEw as
'
declare
view_rec test_vIEw%rowtype ;
view_rec1 test_vIEw%rowtype ;
begin
vIEw_rec.p1 = 2;
vIEw_rec.p2 = 3;
select * into vIEw_rec1 from test_rec2( test_rec3($1),$2);
return vIEw_rec1;
end;'language 'plpgsql';
create or replace function test_rec2(test_view,int) returns test_vIEw as
'
declare
vIEw_return alias for $1;
begin
vIEw_return.p2 = $2;
return vIEw_return;
end;'language 'plpgsql';
create or replace function test_rec3(int) returns test_vIEw as
'
declare
view_return test_vIEw%rowtype;
begin
vIEw_return.p1 = $1;
vIEw_return.p2 =0;
return vIEw_return;
end;'language 'plpgsql';
以下為引用的內容:
create view test_vIEw (p1,p2) as select cast(null as int),cast(null asint)
create or replace function test_rec1(int,int) returns test_vIEw as
'
declare
view_rec test_vIEw%rowtype ;
view_rec1 test_vIEw%rowtype ;
begin
vIEw_rec.p1 = 2;
vIEw_rec.p2 = 3;
select * into vIEw_rec1 from test_rec2( test_rec3($1),$2);
return vIEw_rec1;
end;'language 'plpgsql';
create or replace function test_rec2(test_view,int) returns test_vIEw as
'
declare
vIEw_return alias for $1;
begin
vIEw_return.p2 = $2;
return vIEw_return;
end;'language 'plpgsql';
create or replace function test_rec3(int) returns test_vIEw as
'
declare
view_return test_vIEw%rowtype;
begin
vIEw_return.p1 = $1;
vIEw_return.p2 =0;
return vIEw_return;
end;'language 'plpgsql';