PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Deklarasikan variabel tipe komposit di PostgreSQL menggunakan %TYPE

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat semacam iterator (atau id buatan) untuk serangkaian baris tertentu?

  2. Bagaimana cara menghitung rata-rata pergerakan eksponensial pada postgres?

  3. Kesalahan:Anda harus menginstal setidaknya satu paket postgresql-client-<version>

  4. PostgreSQL mendapatkan dan melepaskan LOCK di dalam fungsi tersimpan

  5. Alat untuk mengubah prosedur tersimpan t-sql (SQL Server) ke pgsql (postgre sql)