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

Bagaimana menjalankan perintah PostgreSQL RAISE secara dinamis

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



  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 database dengan flyway?

  2. Koneksi JDBC yang dibuat ineclipse tidak berfungsi sebagaimana mestinya

  3. Mengapa program C saya dapat berjalan di git bash, tetapi tidak dalam cmd?

  4. Cara memulai ulang Postgresql

  5. Postgres enum di TypeORM