Programing

PL / pgSQL에서 사용되는 '$$'는 무엇입니까?

lottogame 2020. 10. 8. 07:39
반응형

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

반응형