PL / pgSQL에서 사용되는 '$$'는 무엇입니까?
PL / pgSQL의 완전히 새로운이기 때문에, 더블 달러 기호의 의미는 무엇인가 이 기능은 :
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS $$
BEGIN
IF NOT $1 ~ e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THEN
RAISE EXCEPTION 'Wrong formated string "%". Expected format is +999 999';
END IF;
RETURN true;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
나는 그 추측하고있어,에 RETURNS boolean AS $$
, $$
자리 표시 자입니다.
마지막 줄은 약간의 미스터리입니다. $$ LANGUAGE plpgsql STRICT IMMUTABLE;
그건 그렇고, 마지막 줄은 무엇을 의미합니까?
달러 표지판에 사용되는 달러 인용 부호 와있는 함수 정의 할 수있는 방법을 구체적으로 . SQL 스크립트의 거의 모든 곳에서 작은 따옴표를 대체하는 데 사용할 수 있습니다.
함수의 본문은 작은 따옴표로 묶어야하는 문자열 리터럴입니다. 달러 인용은 함수 본문 내부에서 인용 문제를 방지하기 위해 작은 따옴표를 PostgreSQL 전용으로 대체합니다. 작은 따옴표로도 함수 정의를 작성할 수 있습니다. 그러나 그러면 본문의 모든 작은 따옴표를 이스케이프해야합니다.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean 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
' LANGUAGE plpgsql STRICT IMMUTABLE;
이것은 좋은 생각이 아닙니다. 대신 달러 인용을 사용하십시오. 더 구체적으로 토큰을 사이에 넣어 $$
고유하게 만드십시오. 함수 본문 내에 $ 인용 부호를 사용할 수도 있습니다. 실제로 많이합니다.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
AS
$func$
BEGIN
...
END
$func$ LANGUAGE plpgsql STRICT IMMUTABLE;
세부:
두 번째 질문에 관해서 :
가장 우수한 매뉴얼을CREATE FUNCTION
읽고 예제의 마지막 줄을 이해하십시오.
$$는 함수 정의가 시작되고 끝나는 위치를 나타내는 데 사용하는 구분 기호입니다. 다음을 고려하세요,
CREATE TABLE <name> <definition goes here> <options go here, eg: WITH OIDS>
create 함수 구문은 비슷하지만 함수에서 모든 종류의 SQL (특히 문장의 끝, 문자)을 사용할 것이므로 구분하지 않으면 파서가 작동합니다. 따라서 다음과 같이 진술을 읽어야합니다.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS <code delimited by $$> LANGUAGE plpgsql STRICT IMMUTABLE;
실제 정의 이후의 항목은 데이터베이스에 함수에 대한 자세한 정보를 제공하는 옵션이므로 사용을 최적화 할 수 있습니다.
실제로 매뉴얼의 "4.1.2.2. 달러 인용 문자열 상수"를 보면 달러 기호 사이에 문자를 사용할 수도 있고 모두 하나의 구분 기호로 계산된다는 것을 알 수 있습니다.
참고 URL : https://stackoverflow.com/questions/12144284/what-are-used-for-in-pl-pgsql
'Programing' 카테고리의 다른 글
십자가 초기화의 징후는 무엇입니까? (0) | 2020.10.08 |
---|---|
D3 힘 레이아웃 그래프를 확대하는 방법이 있습니까? (0) | 2020.10.08 |
libstdc ++를 정적으로 링크 : 문제가 있습니까? (0) | 2020.10.08 |
PyCharm이 프로젝트의 모든 Python 오류를 나열 할 수 있습니까? (0) | 2020.10.08 |
Windows에서 Ruby / Rails 실행시 제한 사항 (0) | 2020.10.08 |