Gunakan %ROWTYPE
dalam hal ini.
Edit - kasus sederhana
Pengujian oleh A.H. dan DavidEG menunjukkan ini tidak akan berhasil. Masalah yang menarik!
Anda dapat mencoba solusi . Selama definisi Anda seperti contoh, Anda cukup menggunakan
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Tapi masalah Anda yang sebenarnya mungkin tidak sesederhana itu?
Edit 2 - masalah sebenarnya
Seperti yang diharapkan, masalah sebenarnya lebih kompleks:tipe input polimorfik .
Solusi untuk skenario itu lebih sulit, tetapi harus bekerja dengan sempurna:
CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
RETURNS record AS
$BODY$
BEGIN
myvar := $1; -- myvar has now the required type.
--- do stuff with myvar.
myvar := NULL; -- reset if you don't want to output ..
a := 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Telepon:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
Lihat hasil lengkapnya:
SELECT * FROM test('("foo")'::comp_type);
Catatan untuk PostgreSQL 9.0+
Ada pembaruan penting di v9.0. Saya mengutip catatan rilis :
Ergo, selain solusi saya, Anda dapat menggunakan variabel input secara langsung.
Nama File Dinamis
- Cara mengkloning REKAM di PostgreSQL
- Cara menetapkan nilai bidang variabel komposit menggunakan SQL dinamis