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

'$$' được sử dụng để làm gì trong PL / pgSQL

Các ký hiệu đô la này ($$ ) được sử dụng để báo giá đô la , điều này không cụ thể cho các định nghĩa hàm . Nó có thể được sử dụng để thay thế các dấu ngoặc kép chứa các ký tự chuỗi (hằng số) ở bất kỳ đâu trong các tập lệnh SQL.

Phần thân của một hàm sẽ là một chuỗi ký tự như vậy. Báo giá đô la là một thay thế cụ thể cho PostgreSQL cho các dấu ngoặc kép để tránh thoát khỏi các dấu ngoặc kép lồng nhau (một cách đệ quy). Bạn cũng có thể đặt thân hàm trong dấu ngoặc đơn. Nhưng sau đó bạn phải thoát khỏi tất cả các dấu ngoặc đơn trong phần nội dung:

CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean
  LANGUAGE plpgsql STRICT IMMUTABLE AS
'
BEGIN
  IF NOT $1 ~  e''^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$'' THEN
    RAISE EXCEPTION ''Malformed string "%". Expected format is +999 999'';
  END IF;
  RETURN true; 
END
';

Đây không phải là một ý kiến ​​hay. Sử dụng báo giá đô la để thay thế. Đặc biệt hơn, hãy đặt mã thông báo giữa $$ để làm cho mỗi cặp trở thành duy nhất - bạn có thể muốn sử dụng dấu ngoặc kép bằng đô la lồng nhau bên trong thân hàm. Tôi thực sự làm điều đó rất nhiều.

CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean  
  LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
 ...
END
$func$;

Xem:

  • Chèn văn bản với các dấu ngoặc kép trong PostgreSQL

Đối với câu hỏi thứ hai của bạn:
Đọc hướng dẫn tuyệt vời nhất về CREATE FUNCTION để hiểu dòng cuối cùng trong ví dụ của bạn.



  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ắm miền PostgreSQL UNIX so với ổ cắm TCP

  2. Trả về bản ghi setof (bảng ảo) từ hàm

  3. PostgreSQL unnest () với số phần tử

  4. Cài đặt Tiện ích mở rộng PostgreSQL cho tất cả các lược đồ

  5. Làm cách nào để lấy tối thiểu, trung bình và tối đa từ truy vấn của tôi trong postgresql?