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.