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 .