來源:互聯網網民 2008-06-03 06:17:41
評論本文中的示例主要是解決在函數間不能傳遞多個(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';
本文中的示例主要是解決在函數間不能傳遞多個(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';