젠 토토 : 문서 : 9.6 : 젠 토토 9.6 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : 후드 아래 젠 토토/PGSQL | Postgre배트맨 토토 : 문서 : 9.6 : PL/PG배트맨 토토 -배트맨 토토 절차 언어 | 41 장배트맨 토토/pgsql - SQL절차 언어 | 다음 |
개발하는 좋은 방법배트맨 토토/pgsql선택한 텍스트 편집기를 사용하여 기능을 작성하고 다른 창에서PSQL해당 함수를로드하고 테스트합니다. 이런 식으로하고 있다면를 사용하여 함수를 작성하는 것이 좋습니다.함수 생성 또는 교체. 이렇게하면 파일을 다시로드하여 기능 정의를 업데이트 할 수 있습니다. 예를 들어:
함수 testfunc (정수)를 만들거나 교체하십시오. 정수를 $$로 반환합니다 .... .... $$ 언어 배트맨 토토pgsql;
실행 중PSQL, 다음 기능 정의 파일을 다음과 같이로드하거나 다시로드 할 수 있습니다.
\ i filename.sql
그런 다음 즉시 함수를 테스트하기 위해 SQL 명령을 발행합니다.
또 다른 좋은 방법에서배트맨 토토/pgsql는 절차 적 언어의 개발을 용이하게하는 GUI 데이터베이스 액세스 도구가 있습니다. 그러한 도구의 한 예는입니다.pgadmin, 다른 것이 존재하지만. 이 도구는 종종 단일 따옴표를 피하고 기능을보다 쉽게 재현하고 디버그하는 것과 같은 편리한 기능을 제공합니다.
A의 코드배트맨 토토/pgsql함수는에 지정되어 있습니다.함수 만들기문자열 문자로서. 주변의 단일 따옴표로 평범한 방식으로 문자열 문자를 쓰면 함수 본문 내부의 단일 인용문이 두 배가되어야합니다. 마찬가지로 모든 백 슬래시를 두 배로 늘려야합니다 (탈출 문자열 구문이 사용되었다고 가정). 두 배의 인용문은 가장 지루하고, 더 복잡한 경우에는 코드가 완전히 이해할 수 없게 될 수 있습니다. 왜냐하면 6 개 이상의 인접한 견적 마크가 필요한 것을 쉽게 찾을 수 있기 때문입니다. 대신 기능 본문을 A로 작성하는 것이 좋습니다."Dollar-Quoted"문자열 리터럴 (참조섹션 4.1.2.4). 달러 인용 접근 방식에서는 견적 표시를 두 배로 늘리지 않고 필요한 각 레벨의 중첩에 대해 다른 달러를 선보이는 구분기를 선택하도록주의하십시오. 예를 들어,를 쓸 수 있습니다.기능 만들기명령 AS :
함수 testfunc (Integer)를 $ proc $로 반환합니다 .... .... $ proc $ 언어 배트맨 토토pgsql;
이 내에서는 SQL 명령 및의 간단한 문자 그대로 인용 표시를 사용할 수 있습니다.$$문자열로 조립하는 SQL 명령의 조각을 구분합니다. 포함 된 텍스트를 인용 해야하는 경우$$, 당신은 사용할 수 있습니다$ q $등.
다음 차트는 달러 인용없이 견적 표시를 쓸 때해야 할 일을 보여줍니다. 사전 계층 인용 코드를 더 이해하기 쉬운 것으로 번역 할 때 유용 할 수 있습니다.
예를 들어 기능 본문을 시작하고 끝내려면
함수 만들기 foo () 정수를 반환합니다. .... .... '언어 plpgsql;
단일 인용 기능 본문 내의 어느 곳에서나 견적 마크필수쌍으로 나타납니다.
함수 본체 내부의 문자열 리터럴의 경우 :
a_output : = ''blah ''; f_name = ''foobar ''; 사용자 중에서 *를 선택하십시오.
달러 크기의 접근 방식에서는 다음과 같이 씁니다.
a_output : = 'blah'; f_name = 'foobar'; 사용자 중에서 *를 선택하십시오.
정확히배트맨 토토/pgsql파서는 어느 경우에도 볼 수 있습니다.
함수 본체 내부의 문자열 상수에 단일 따옴표가 필요할 때 :
a_output : = a_output || ``그리고``foobar '' ''and xyz ''와 같은 이름.
실제로 값이 추가되었습니다a_output그리고 'foobar'및 xyz와 같은 이름.
달러 크기의 접근 방식에서는 다음과 같이 씁니다.
a_output : = a_output || $$ 및 'foobar'및 xyz $$와 같은 이름
이 주변의 달러 쿼트 구분자를 조심하는 것은 단지 아닙니다$$.
함수 내부의 문자열의 단일 따옴표 마크가 해당 문자열의 끝에 인접 해있을 때 :.
a_output : = a_output || ``그리고``foobar '' '' ''과 같은 이름
값이 첨부a_output그런 다음 :그리고 'foobar'와 같은 이름.
달러 크기의 접근 방식에서 이것은 다음과 같습니다.
a_output : = a_output || $$ 및 'foobar'$$와 같은 이름
문자열 상수에서 두 개의 단일 따옴표 마크를 원할 때 (8 인용 자국을 차지함) 이것은 해당 문자열의 끝 상수 (2)에 인접 해 있습니다. 다른 기능을 생성하는 함수를 작성하는 경우에만 필요할 것입니다.예 41-9. 예를 들어:
a_output : = a_output || ''v_ ''|| referrer_keys.kind || '' 좋다 '''''''''' || referrer_keys.key_string || '' '' '' '' '' '' ' 그런 다음`` '' '' '||를 반환하십시오 referrer_keys.referrer_type || '' '' '';; 끝 If; '';
값a_output그런 다음 :
v _... kake ''... ''```` '...' '; 끝 If;
달러 크기의 접근 방식에서 이것은 다음과 같습니다.
a_output : = a_output || V _ $$ || 인 경우 $$ referrer_keys.kind || $$와 같은 '$$ || referrer_keys.key_string || $$ ' 그런 다음 '$$ ||를 반환하십시오 referrer_keys.referrer_type || $$ '; 끝 If; $$;
우리가 단일 견적 자국 만 넣을 필요가 있다고 가정합니다.a_output, 사용하기 전에 재확인되기 때문에.
사용자가 피해를 입히기 전에 단순하지만 일반적인 문제의 사례를 찾는 데 도움을주기 위해배트맨 토토/pgsql추가 제공checks. 구성에 따라 활성화되면 A를 방출하는 데 사용할 수 있습니다.경고또는 an오류함수를 편집하는 동안. A를받은 함수경고추가 메시지를 생성하지 않고 실행할 수 있으므로 별도의 개발 환경에서 테스트하는 것이 좋습니다.
이 추가 점검은 구성 변수를 통해 활성화됩니다배트맨 토토pgsql.extra_warnings경고 및배트맨 토토pgsql.extra_errors오류. 둘 다 쉼표로 구분 된 수표 목록으로 설정할 수 있습니다."없음"또는"All". 기본값은"없음". 현재 사용 가능한 수표 목록에는 하나만 포함됩니다.
선언이 이전에 정의 된 변수를 어둡게하는지 확인합니다.
다음 예는의 효과를 보여줍니다.배트맨 토토pgsql.extra_warnings설정Shadowed_variables:
배트맨 토토pgsql.extra_warnings를 'Shadowed_variables'로 설정합니다. function foo (f1 int) int를 $$로 반환합니다 선언하다 f1 int; 시작하다 반환 f1; 끝; $$ 언어 plpgsql; 경고 : 변수 "f1"그림자 이전에 정의 된 변수입니다 3 행 : F1 int; ^ 기능 만들기