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

Dapatkan hasil dari query di DO satement

Anda tidak bisa mengembalikan nilai dari DO penyataan. Buat fungsi plpgsql sebagai gantinya.

Ada beberapa cara untuk menentukan tipe pengembalian dengan RETURNING klausa atau dengan OUT parameter. Baca manual tentang CREATE FUNCTION .

Ada beberapa cara untuk mengembalikan nilai dari fungsi. Baca bab Kembali Dari Fungsi dalam manual.

Khususnya, karena Anda mencoba mengembalikan seluruh baris dari sebuah tabel, Anda dapat menggunakan tipe tabel yang terdaftar untuk deklarasi fungsi:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Telepon:

SELECT * FROM foo ();

Atau coba cari di sini di SO. Saya memposting banyak contoh kode terkait .

Solusi untuk DO pernyataan

Jika Anda tidak dapat menggunakan suatu fungsi, satu-satunya solusi setengah jalan yang masuk akal dengan pernyataan DO adalah dengan menggunakan tabel sementara:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Tabel sementara dihapus secara otomatis di akhir sesi .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - FATAL:file database tidak kompatibel dengan server

  2. Pernyataan Postgresql Sederhana - nama kolom tidak ada

  3. Cara umum untuk membandingkan stempel waktu di Oracle, PostgreSQL, dan SQL Server

  4. Pemicu DB Postgres memanggil Fungsi Java

  5. Mengubah bidang Enum menggunakan Alembic