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 .