Anda tidak dapat memanggil RAISE
secara dinamis (dengan EXECUTE
) di PL/pgSQL - yang hanya berfungsi untuk pernyataan SQL, dan RAISE
adalah perintah PL/pgSQL.
Gunakan fungsi sederhana ini sebagai gantinya:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Telepon:
SELECT f_raise('My message is empty!');
Terkait:
Jawaban tambahan untuk komentar
CREATE OR REPLACE FUNCTION f_raise1(VARIADIC text[])
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION 'Reading % % %!', $1[1], $1[2], $1[3];
END
$func$;
Telepon:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
bukan tipe data, tetapi mode argumen . -
Elemen harus ditangani seperti elemen array lainnya.
-
Untuk menggunakan beberapa variabel dalam
RAISE
pernyataan, masukkan beberapa%
ke dalam teks pesan.
Contoh di atas akan gagal jika tidak ada $3
dilewatkan. Anda harus merakit string dari jumlah variabel elemen input. Contoh:
CREATE OR REPLACE FUNCTION f_raise2(VARIADIC _arr text[])
RETURNS void
LANGUAGE plpgsql AS
$func$
DECLARE
_msg text := array_to_string(_arr, ' and '); -- simple string construction
BEGIN
RAISE EXCEPTION 'Reading %!', _msg;
END
$func$;
Telepon:
SELECT f_raise2('the','manual','educates');
Saya ragu Anda memerlukan VARIADIC
parameter untuk ini sama sekali. Baca manualnya di sini .
Sebaliknya, tentukan semua parameter, mungkin tambahkan default:
CREATE OR REPLACE FUNCTION f_raise3(_param1 text = ''
, _param2 text = ''
, _param3 text = 'educates')
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION 'Reading % % %!', $1, $2, $3;
END
$func$;
Telepon:
SELECT f_raise3('the','manual','educates');
Atau:
SELECT f_raise3(); -- defaults kick in