함수를 생성하려면PL/스포츠 토토 사이트언어, 표준을 사용하세요 구문
함수 생성기능 이름 (인수 유형) 반환반환 유형AS '
# PL/스포츠 토토 사이트 함수 본문
' 언어 'pltcl';
PL/스포츠 토토 사이트U동일하지만, 언어는 다음과 같이 지정되어야 합니다.pl스포츠 토토 사이트u.
함수 본문은 단순히 스포츠 토토 사이트 스크립트의 일부입니다. 함수가 호출되면 인수 값이 다음과 같이 전달됩니다. 변수$1 ... $n스포츠 토토 사이트 스크립트에. 결과가 반환됩니다. 일반적인 방법으로 스포츠 토토 사이트 코드에서 a반환문장. 예를 들어, 함수 두 정수 값 중 더 큰 값을 반환하는 것이 정의될 수 있습니다. 다음과 같이:
CREATE FUNCTION 스포츠 토토 사이트_max (정수, 정수) RETURNS 정수 AS '
if $1 $2 $1 반환
2달러를 돌려주다
' LANGUAGE 'pltcl' WITH (isStrict);
조항 참고WITH(isStrict), 이는 NULL 입력 값에 대해 생각할 필요가 없도록 해줍니다. NULL이 전달되면 함수는 전혀 호출되지 않지만 자동으로 NULL 결과를 반환합니다.
비엄격 함수에서 인수의 실제 값이
NULL, 해당$n변수
빈 문자열로 설정됩니다. 특정 여부를 감지하려면
인수가 NULL이면 함수를 사용하세요.argisnull. 예를 들어 우리가 원한다고 가정해 보겠습니다.스포츠 토토 사이트_max하나의 null과 하나의
null이 아닌 인수를 반환하는 대신 null이 아닌 인수를 반환합니다.
NULL:
CREATE FUNCTION 스포츠 토토 사이트_max (정수, 정수) RETURNS 정수 AS '
if [argisnull 1]
if [argisnull 2] return_null
2달러를 돌려주다
if [argisnull 2] $1 반환
if $1 $2 $1 반환
2달러를 돌려주다
' 언어 'pltcl';
위에 표시된 대로 PL/스포츠 토토 사이트에서 NULL 값을 반환하려면 함수, 실행return_null. 이 기능이 엄격한지 여부에 관계없이 수행될 수 있습니다.
복합 유형 인수는 스포츠 토토 사이트로 프로시저에 전달됩니다. 배열. 배열의 요소 이름은 속성 이름입니다. 복합형이다. 전달된 행의 속성에 다음이 있는 경우 NULL 값은 배열에 나타나지 않습니다! 여기는 overpaid_2 함수를 정의하는 예( 나이가 많은포스트그레SQL8564_8596
CREATE FUNCTION overpaid_2 (EMP) RETURNS bool AS '
if 200000.0 < $1(급여)
"t"를 반환
if $1(연령) < 30 && 100000.0 < $1(급여)
"t"를 반환
"f"를 반환
' 언어 'pltcl';
현재는 반환에 대한 지원이 없습니다. 복합형 결과 값입니다.
PL/스포츠 토토 사이트 함수의 스크립트에 제공된 인수 값 단순히 텍스트 형식으로 변환된 입력 인수입니다( SELECT 문으로 표시된 경우). 반대로,반환명령은 무엇이든 허용합니다 함수의 입력 형식으로 허용되는 문자열 반환 유형을 선언했습니다. 따라서 PL/스포츠 토토 사이트 프로그래머는 다음을 조작할 수 있습니다. 데이터 값은 마치 텍스트인 것처럼 보입니다.
때때로 다음과 같은 전역 상태 데이터를 갖는 것이 유용합니다. 프로시저에 대한 두 호출 사이에 보관되거나 두 프로시저 간에 공유됩니다. 다른 절차. 이는 모든 PL/스포츠 토토 사이트 이후로 쉽게 수행됩니다. 하나의 백엔드에서 실행되는 프로시저는 동일한 안전 스포츠 토토 사이트을 공유합니다. 통역사. 따라서 모든 전역 스포츠 토토 사이트 변수는 모두가 액세스할 수 있습니다. PL/스포츠 토토 사이트 프로시저를 호출하고 다음 기간 동안 지속됩니다. SQL 클라이언트 연결. (참고하세요PL/스포츠 토토 사이트U함수도 마찬가지로 전역 공유 데이터이지만 다른 스포츠 토토 사이트 해석기에 있으므로 사용할 수 없습니다. PL/스포츠 토토 사이트 기능과 통신합니다.)
의도하지 않게 PL/스포츠 토토 사이트 절차를 보호하기 위해
서로 간섭하면서 전역 배열을 사용할 수 있게 됩니다.
를 통해 각 절차에upvar명령. 이 변수의 전역 이름은 프로시저의 이름입니다.
내부 이름과 로컬 이름은 다음과 같습니다.GD. 다음을 권장합니다.GD다음의 개인 상태 데이터에 사용됩니다.
절차. 값에만 일반 스포츠 토토 사이트 전역 변수를 사용하십시오.
귀하가 특별히 여러 사람과 공유하려는 의도가 있는 것
절차.
사용 예GD다음에 나타남spi_execp아래 예입니다.
다음 명령을 사용하여 데이터베이스에 액세스할 수 있습니다 PL/스포츠 토토 사이트 프로시저 본문에서:
spi_exec ?-countn?
?-배열이름? 질의 ?루프-본문?문자열로 제공된 SQL 쿼리를 실행합니다. 오류 쿼리로 인해 오류가 발생합니다. 그렇지 않으면, 명령의 반환 값은 처리된 행 수입니다. 쿼리에 의해 (선택, 삽입, 업데이트 또는 삭제) 또는 쿼리가 유틸리티 명령문인 경우 0입니다. 또한, 쿼리가 SELECT 문인 경우 선택한 열은 설명된 대로 스포츠 토토 사이트 변수에 배치됩니다. 아래.
선택사항-개수값
말한다spi_exec최대
쿼리에서 처리할 행 수입니다. 효과
이는 쿼리를 커서로 설정하는 것과 비슷합니다.
그리고 말하길n 가져오기.
쿼리가 다음과 같은 경우선택문, 문의 결과 열 값 열 이름을 딴 스포츠 토토 사이트 변수에 배치됩니다. 만약에-배열옵션이 주어지면, 대신 열 값은 명명된 SELECT 열 이름이 다음과 같이 사용되는 연관 배열 배열 인덱스.
쿼리가 SELECT 문이고 아니요인 경우루프-본문스크립트가 주어지면
결과의 첫 번째 행만 스포츠 토토 사이트에 저장됩니다.
변수; 나머지 행은 무시됩니다. 매장 없음
SELECT가 행을 반환하지 않는 경우 발생합니다(이 경우는
결과를 확인하여 감지됨spi_exec). 예를 들어,
spi_exec "SELECT count(*) AS cnt FROM pg_proc"
스포츠 토토 사이트 변수를 설정합니다$cnt행의 수에pg_proc시스템 카탈로그.
선택사항인 경우루프-본문인수가 주어졌습니다. 각 행에 대해 한 번 실행되는 스포츠 토토 사이트 스크립트 조각 SELECT 결과에서(참고:루프-본문주어진 경우 무시됩니다. 쿼리는 SELECT가 아닙니다.) 현재 행의 값 필드는 각 필드 앞에 스포츠 토토 사이트 변수에 저장됩니다. 반복. 예를 들어,
spi_exec -array C "SELECT * FROM pg_class"
elog DEBUG "테이블 $C(relname) 있음"
모든 행에 대해 DEBUG 로그 메시지를 인쇄합니다. pg_class. 이 기능은 다른 스포츠 토토 사이트과 유사하게 작동합니다. 루핑 구조; 특히계속그리고휴식내부에서는 평소와 같이 작업하세요 루프 본문.
SELECT 결과의 필드가 NULL인 경우 대상은 변수는 다음과 같습니다"설정 해제"설정되지 않고.
spi_prepare 질의 유형 목록나중 실행을 위해 쿼리 계획을 준비하고 저장합니다. 저장된 계획은 평생 동안 유지됩니다. 현재 백엔드.
쿼리는 다음을 사용할 수 있습니다.인수, 이는 언제든지 제공되는 값에 대한 자리 표시자입니다. 그 계획은 실제로 실행된다. 쿼리 문자열에서 다음을 참조하세요. 기호에 의한 주장에$1 ... $n. 쿼리가 사용하는 경우 인수, 인수 유형의 이름을 제공해야 합니다. 스포츠 토토 사이트 목록으로. (빈 목록 작성유형 목록인수가 사용되지 않은 경우.) 현재 인수 유형은 다음으로 식별되어야 합니다. pg_type에 표시된 내부 유형 이름; 예를 들어int4아님정수.
반환 값spi_prepare에 사용되는 쿼리 ID입니다.
후속 호출spi_execp. 참조spi_execp예를 들어.
spi_execp ?-countn?
?-배열이름? ?-널문자열? 쿼리ID ?값 목록? ?루프-본문?이전에 준비된 쿼리를 실행합니다.spi_prepare. 쿼리ID다음에서 반환한 ID입니다.spi_prepare. 쿼리의 경우
참조 인수, a값 목록반드시 제공되어야 합니다: 이
인수에 대한 실제 값의 스포츠 토토 사이트 목록입니다. 이
인수 유형 목록과 길이가 같아야 합니다.
이전에 다음에게 주어졌습니다.spi_prepare. 생략값 목록쿼리가 없는 경우
인수.
다음에 대한 선택적 값-널공백의 문자열이며'n'문자가 말하는spi_execp인수 중 어느 것이
null 값. 주어지면 정확히 동일해야 합니다.
길이는값 목록.
지정되지 않은 경우 모든 인수 값은
NULL이 아닙니다.
쿼리와 그 검색 방식을 제외하고
인수가 지정되었습니다.spi_execp다음과 같이 작동합니다spi_exec.-개수, -배열,
그리고루프-본문옵션은
동일하며 결과 값도 마찬가지입니다.
다음은 PL/스포츠 토토 사이트 함수의 예입니다. 준비된 계획:
CREATE FUNCTION t1_count(정수, 정수) 정수 AS '를 반환합니다.
if ![ 정보가 존재하는 경우 GD(plan) ]
# 첫 번째 호출에서 저장된 계획을 준비합니다.
GD 설정(계획) [ spi_prepare \\
"SELECT count(*) AS cnt FROM t1 WHERE num = \\$1 AND num <= \\$2" \\
[ 목록 int4 int4 ] ]
spi_execp -count 1 $GD(계획) [ 목록 $1 $2 ]
$cnt 반환
' 언어 'pltcl';
스포츠 토토 사이트이 봐야 하는 각 백슬래시는 다음과 같아야 합니다.
함수를 입력하면 두 배가 됩니다.
파서는 CREATE FUNCTION에서도 백슬래시를 처리합니다. 우리
주어진 쿼리 문자열 내에 백슬래시가 필요합니다.spi_prepare다음을 보장하기 위해$n마커가 전달됩니다
~까지spi_prepare있는 그대로이며 스포츠 토토 사이트 변수 대체로 대체되지 않습니다.
spi_lastoid마지막으로 삽입된 행의 OID를 반환합니다.spi_exec'd 또는spi_execp'' 쿼리입니다. 해당 쿼리가
단일 행 INSERT. (그렇지 않으면 0을 얻습니다.)
인용문 문자열작은따옴표 및
주어진 문자열의 백슬래시 문자. 이는 다음과 같습니다.
삽입될 문자열을 안전하게 인용하는 데 사용됩니다.
다음에게 주어진 SQL 쿼리spi_exec또는spi_prepare. 예를 들어,
다음과 같은 쿼리 문자열
"'$val' AS ret 선택"
스포츠 토토 사이트 변수 val이 실제로 포함하는 곳그렇지 않습니다. 이로 인해 최종 쿼리 문자열
재개로 '하지 않음' 선택
이 과정에서 구문 분석 오류가 발생합니다.spi_exec또는spi_prepare. 제출된 쿼리는
포함
재개로 '하지 않음' 선택
PL/스포츠 토토 사이트에서 다음과 같이 형성될 수 있습니다.
"SELECT '[ quote $val ]' AS ret"
이점 중 하나spi_execp당신은 그럴 필요가 없다는 것입니다
인수 값은 다음과 같으므로 인수 값을 인용해 보세요.
SQL 쿼리 문자열의 일부로 구문 분석되지 않습니다.
elog 레벨 msg로그 또는 오류 메시지를 내보냅니다. 가능한 수준은 다음과 같습니다.디버그, 로그, 정보, 공지, 경고, 오류, 그리고치명적. 대부분은 단순히 다음과 같은 메시지가 주어졌습니다.elog백엔드 C 함수.오류올림 오류 조건: 함수의 추가 실행은 포기되었으며 현재 거래가 중단되었습니다.치명적트랜잭션을 중단하고 현재 백엔드가 종료됩니다( 아마도 PL/스포츠 토토 사이트에서 이 오류 수준을 사용할 이유가 없을 것입니다. 기능을 수행하지만 완전성을 위해 제공됩니다.)
트리거 절차는 PL/스포츠 토토 사이트로 작성될 수 있습니다. 관례대로 에서포스트그레SQL, 프로시저 트리거로 호출되는 것은 함수로 선언되어야 합니다. 인수가 없고 반환 유형은트리거.
트리거 관리자의 정보가 다음으로 전달됩니다. 다음 변수의 프로시저 본문:
CREATE TRIGGER의 트리거 이름 진술.
트리거를 발생시킨 테이블의 개체 ID 호출할 프로시저입니다.
접두사가 붙은 테이블 필드 이름의 스포츠 토토 사이트 목록
빈 목록 요소. 따라서 요소 이름을 검색하면
목록에 포함스포츠 토토 사이트'slsearch명령은 다음을 반환합니다.
첫 번째 열의 경우 1로 시작하는 요소 번호,
필드에 관례적으로 번호가 매겨지는 것과 같은 방식으로PostgreSQL.
문자열이전또는이후유형에 따라 다름 트리거 호출.
문자열ROW또는진술문트리거 유형에 따라 다름 전화해.
문자열삽입, 업데이트또는삭제트리거 호출 유형에 따라 다릅니다.
새 값을 포함하는 연관 배열 INSERT/UPDATE 작업의 경우 테이블 행이, DELETE의 경우 비어 있습니다. 배열은 필드 이름으로 인덱싱됩니다. NULL인 필드 배열에 나타나지 않습니다!
이전 값을 포함하는 연관 배열 UPDATE/DELETE 작업의 경우 테이블 행이, INSERT의 경우 비어 있습니다. 배열은 필드 이름으로 인덱싱됩니다. NULL인 필드 배열에 나타나지 않습니다!
주어진 프로시저에 대한 인수의 스포츠 토토 사이트 목록 CREATE TRIGGER 문에서. 이러한 주장은 또한 다음으로 액세스 가능$1 ... $n프로시저 본문에서.
트리거 프로시저의 반환 값은 다음 중 하나일 수 있습니다. 문자열확인또는건너뛰기또는에서 반환된 목록배열 가져오기스포츠 토토 사이트 명령. 반환 값이 다음과 같은 경우확인, 작업 트리거를 실행한 (INSERT/UPDATE/DELETE)가 진행됩니다. 일반적으로.건너뛰기트리거를 알려줍니다 관리자는 이 행에 대한 작업을 자동으로 억제합니다. 만약 목록이 반환되면 PL/스포츠 토토 사이트에게 수정된 행을 반환하도록 지시합니다. 대신 삽입될 트리거 관리자 $NEW에 제공됩니다(INSERT/UPDATE에만 작동함). 불필요하다 이 모든 것은 트리거가 BEFORE일 때만 의미가 있다고 말합니다. 그리고 각 행에 대해; 그렇지 않으면 반환 값이 무시됩니다.
여기에 강제로 실행하는 트리거 절차의 작은 예가 있습니다. 업데이트 횟수를 추적하기 위한 테이블의 정수 값 행에서 수행되는 것입니다. 새 행이 삽입된 경우 값 0으로 초기화된 다음 업데이트할 때마다 증가합니다. 작업:
함수 생성 trigfunc_modcount()는 '로 트리거를 반환합니다.
$TG_op 전환
삽입
신규 설정($1) 0
업데이트
새로운 설정($1) $OLD($1)
신규($1) 증가
기본값
반품 확인
반환 [배열 새로 가져오기]
' 언어 'pltcl';
CREATE TABLE mytab(숫자 정수, 설명 텍스트, modcnt 정수);
mytab에 삽입하거나 업데이트하기 전에 트리거 trig_mytab_modcount를 생성하세요.
각 행 실행 절차에 대해 trigfunc_modcount('modcnt');
트리거 절차 자체는 열 이름; 이는 트리거 인수에서 제공됩니다. 이 트리거 절차를 다른 용도로 재사용할 수 있습니다. 테이블.
알 수 없음명령PL/스포츠 토토 사이트은 사용 시 스포츠 토토 사이트 코드 자동 로딩을 지원합니다. 그것 특수 테이블을 인식합니다.pl스포츠 토토 사이트_modules27410_27505알 수 없음테이블에서 가져오고 생성 직후 스포츠 토토 사이트 인터프리터에 로드됩니다. 통역사.
그 동안알 수 없음모듈은 다음과 같습니다. 실제로 필요한 초기화 스크립트가 포함되어 있습니다. 일반적으로 스포츠 토토 사이트을 정의합니다"알 수 없음"스포츠 토토 사이트이 인식하지 못할 때마다 호출되는 절차 호출된 프로시저 이름입니다.PL/스포츠 토토 사이트의 표준 버전입니다. 프로시저는 모듈을 찾으려고 시도합니다.pl스포츠 토토 사이트_modules필수를 정의합니다. 절차. 발견되면 인터프리터에 로드됩니다. 그런 다음 실행이 원래대로 진행되도록 허용됩니다. 프로시저 호출을 시도했습니다. 보조 테이블pl스포츠 토토 사이트_modfuncs다음 색인을 제공합니다. 함수는 어떤 모듈에 의해 정의되므로 조회는 비교적 빠르다.
그포스트그레SQL배포 다음 테이블을 유지 관리하기 위한 지원 스크립트가 포함되어 있습니다.pl스포츠 토토 사이트_loadmod, pl스포츠 토토 사이트_listmod, pl스포츠 토토 사이트_delmod및 표준 소스 알 수 없는 모듈share/unknown.pl스포츠 토토 사이트. 이 모듈은 처음에 각 데이터베이스에 로드되어야 합니다. 자동 로딩 메커니즘을 지원합니다.
테이블pl스포츠 토토 사이트_modules그리고pl스포츠 토토 사이트_modfuncs다음에서 읽을 수 있어야 합니다. 하지만 해당 파일을 소유자만이 소유하고 쓸 수 있도록 만드는 것이 현명합니다. 데이터베이스 관리자입니다.
에PostgreSQL, 하나와 동일한 함수 이름을 다른 함수에 사용할 수 있습니다. 인수의 수나 유형이 다르기 때문입니다. 그러나 스포츠 토토 사이트은, 모든 프로시저 이름은 고유해야 합니다. PL/스포츠 토토 사이트은 다음을 다룹니다. 이는 내부 스포츠 토토 사이트 프로시저 이름에 프로시저의 개체 IDpg_proc행을 이름의 일부로 포함합니다. 따라서,PostgreSQL다음과 함께 작동합니다. 이름이 같고 인수 유형이 다르면 스포츠 토토 사이트이 달라집니다. 절차도. 이는 일반적으로 PL/스포츠 토토 사이트에서는 문제가 되지 않습니다. 프로그래머이지만 디버깅할 때 표시될 수도 있습니다.