PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách thực thi lệnh PostgreSQL RAISE động

Bạn không thể gọi RAISE động (với EXECUTE ) trong PL / pgSQL - chỉ hoạt động cho các câu lệnh SQL và RAISE là một lệnh PL / pgSQL.

Sử dụng chức năng đơn giản này để thay thế:

CREATE OR REPLACE FUNCTION f_raise(text)
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   RAISE EXCEPTION '%', $1;
END
$func$;

Gọi:

SELECT f_raise('My message is empty!');

Có liên quan:

Câu trả lời bổ sung cho nhận xét

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$;

Gọi:

SELECT f_raise1('the','manual','educates');
  • VARIADIC không phải là một loại dữ liệu, mà là một chế độ đối số .

  • Các phần tử phải được xử lý giống như bất kỳ phần tử mảng nào khác.

  • Để sử dụng nhiều biến trong RAISE câu lệnh, đặt nhiều % vào văn bản tin nhắn.

Ví dụ trên sẽ không thành công nếu không có $3 được thông qua. Bạn sẽ phải tập hợp một chuỗi từ số lượng phần tử đầu vào có thể thay đổi. Ví dụ:

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$;

Gọi:

SELECT f_raise2('the','manual','educates');

Tôi nghi ngờ bạn cần một VARIADIC tham số cho điều này ở tất cả. Đọc hướng dẫn tại đây .
Thay vào đó, hãy xác định tất cả các tham số, có thể thêm giá trị mặc định:

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$;

Gọi:

SELECT f_raise3('the','manual','educates');

Hoặc:

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. Cách xóa Zeros theo dấu vết khỏi số thập phân trong PostgreSQL

  2. Phát hiện xem hàng đã được cập nhật hoặc được chèn hay chưa

  3. đúng cách để bắt đầu / dừng cơ sở dữ liệu postgres pg_ctl hoặc dịch vụ postgres

  4. Cách chèn vào mảng trong PostgreSQL

  5. Làm thế nào để cài đặt một gói Python trên Linux để nó được tìm thấy bởi phần mở rộng PostgreSQL 13 plpython3u đã hoạt động?