무지개 토토 생성 [ 또는 교체 ]이름 ( [ [ argmode ] [ 인수이름 ] argtype[, ...] ] )
[ 반품재입력]
언어언어명| 불변 | 안정적 | 휘발성
| NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격
| [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자
| 비용execution_cost| 행결과_행| 설정configuration_parameter받는 사람값 | = 값| 현재부터
| 처럼 '정의'
| 그대로 'obj_file', 'link_symbol'
...
[ 와 (속성 [, ...] ) ]
함수 생성새 정의 기능.함수 생성 또는 교체새 기능을 생성하거나 기존 기능을 대체합니다. 정의.
스키마 이름이 포함되면 함수는 다음에 생성됩니다. 지정된 스키마. 그렇지 않으면 현재에 생성됩니다. 스키마. 새 함수의 이름은 기존 함수와 일치하면 안 됩니다. 동일한 스키마에서 동일한 인수 유형을 사용하는 함수입니다. 그러나 다양한 인수 유형의 함수는 이름을 공유할 수 있습니다. (이것을 호출합니다.오버로딩).
기존 함수의 현재 정의를 바꾸려면 다음을 사용하십시오.함수 생성 또는 교체. 그렇지 않다 함수의 이름이나 인수 유형을 변경할 수 있습니다. 방식으로(시도한다면 실제로는 새롭고 고유한 기능). 또한,생성 또는 교체 무지개 토토귀하의 반환 유형을 변경할 수 없습니다. 기존 무지개 토토. 그렇게 하려면 무지개 토토. (사용시아웃매개변수, 이는 이름이나 유형을 변경할 수 없음을 의미합니다.아웃삭제를 제외한 매개변수 무지개 토토.)
함수를 삭제한 후 다시 생성하면 새 함수는 예전과 같은 실체가 아닙니다. 기존 항목을 삭제해야 합니다. 이전 함수를 참조하는 규칙, 보기, 트리거 등. 사용함수 생성 또는 교체변경하려면 참조하는 객체를 중단하지 않고 함수 정의 기능. 또한,함수 변경될 수 있습니다 기존의 보조 속성 대부분을 변경하는 데 사용됩니다. 기능.
함수를 생성한 사용자는 다음의 소유자가 됩니다. 기능.
함수의 이름(선택적으로 스키마 한정) 생성합니다.
인수 모드: 둘 중 하나IN, 밖으로또는INOUT. 생략하면 기본값은IN.
인수의 이름. 일부 언어(현재는 PL/pgSQL)에서는 함수 본문에 이름을 사용할 수 있습니다. 에 대한 다른 언어에서는 입력 인수의 이름이 추가입니다. 문서. 그러나 출력 인수의 이름은 다음과 같습니다. 결과의 열 이름을 정의하므로 중요합니다. 행 유형. (출력 인수의 이름을 생략하면 시스템은 기본 열 이름을 선택합니다.)
함수 인수의 데이터 유형(선택 사항) 스키마 한정)(있는 경우). 인수 유형은 기본일 수 있습니다. 복합 또는 도메인 유형을 참조하거나 테이블 열입니다.
구현 언어에 따라 지정할 수 있습니다"유사형"예를 들어cstring. 유사 유형은 실제 인수 유형이 불완전하게 지정되었거나 범위를 벗어났습니다. 일반적인 SQL 데이터 유형의 집합입니다.
열 유형은 쓰기로 참조됩니다.테이블 이름.열 이름%TYPE. 이것을 사용하여 기능은 때때로 기능을 독립적으로 만드는 데 도움이 될 수 있습니다. 테이블 정의가 변경되었습니다.
반환 데이터 유형(선택적으로 스키마 한정). 는 반환 유형은 기본, 복합 또는 도메인 유형일 수 있습니다. 테이블 열의 유형을 참조할 수 있습니다. 에 따라 구현 언어를 지정할 수도 있습니다."유사형"예를 들어cstring. 무지개 토토이 작동하지 않는 경우 값을 반환하고 지정하십시오.공허다음과 같이 반환 유형입니다.
있을 때아웃또는INOUT매개변수,반환절은 생략 가능합니다. 존재하는 경우, 출력에 암시된 결과 유형과 일치해야 합니다. 매개변수:기록있는 경우 여러 출력 매개변수 또는 단일과 동일한 유형 출력 매개변수입니다.
그SETOF수정자는 다음을 나타냅니다. 이 함수는 항목이 아닌 일련의 항목을 반환합니다. 단일 항목.
열의 유형은 쓰기로 참조됩니다.테이블 이름.열 이름%TYPE.
함수가 속한 언어의 이름 에서 구현되었습니다. 가능합니다SQL, C, 내부또는 사용자 정의 이름 절차적 언어. 이전 버전과의 호환성을 위해 이름은 작은따옴표로 묶을 수 있습니다.
이러한 속성은 쿼리 최적화 프로그램에 함수의 동작. 최대 1개의 선택이 가능합니다. 지정. 이들 중 어느 것도 나타나지 않으면,휘발성기본 가정입니다.
불변은 다음을 나타냅니다. 함수는 데이터베이스를 수정할 수 없으며 항상 동일한 인수 값이 주어지면 동일한 결과가 나타납니다. 즉, 데이터베이스 조회를 수행하거나 다른 방식으로 사용하지 않습니다. 인수 목록에 직접적으로 존재하지 않는 정보. 만약에 이 옵션이 주어지면 다음을 사용하여 함수를 호출할 수 있습니다. 모든 상수 인수는 즉시 다음으로 대체될 수 있습니다. 함수 값입니다.
안정적는 다음을 나타냅니다.
함수는 데이터베이스를 수정할 수 없으며
단일 테이블 스캔은 일관되게 동일한 결과를 반환합니다.
동일한 인수 값에 대한 결과이지만 그 결과는
SQL 문 전체에서 변경될 수 있습니다. 이는 적절한
결과가 데이터베이스에 따라 달라지는 함수 선택
조회, 매개변수 변수(예: 현재 시간
영역) 등. 또한 다음 사항에 유의하세요.현재_타임스탬프함수 계열
그 값이 내부적으로 변하지 않기 때문에 안정적인 것으로 간주됩니다.
거래.
휘발성다음을 나타냅니다. 단일 테이블 스캔 내에서도 함수 값이 변경될 수 있으며, 그래서 최적화를 할 수 없습니다. 상대적으로 적은 수의 데이터베이스 이런 의미에서 함수는 휘발성입니다. 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday(). 하지만 어떤 기능이든 부작용이 있는 경우에도 휘발성으로 분류되어야 합니다. 호출이 실패하는 것을 방지하기 위해 결과는 상당히 예측 가능합니다. 최적화되었습니다. 예는 다음과 같습니다setval().
자세한 내용은 참조섹션 34.6.
NULL 입력 시 호출됨( 기본값)은 함수가 호출될 것임을 나타냅니다. 일반적으로 인수 중 일부가 null인 경우입니다. 그때이다 null을 확인하는 함수 작성자의 책임 필요한 경우 가치를 평가하고 적절하게 대응하세요.
NULL 입력 시 NULL을 반환합니다.또는STRICT함수를 나타냅니다. 인수 중 하나라도 null일 때마다 항상 null을 반환합니다. 이 매개변수를 지정하면 함수가 작동하지 않습니다. null 인수가 있을 때 실행됩니다. 대신 null 결과는 자동으로 가정됩니다.
보안 호출자다음을 나타냅니다. 이 기능은 다음의 권한으로 실행됩니다. 그것을 호출하는 사용자. 그게 기본값이에요.보안 정의자함수를 지정합니다. 해당 사용자의 권한으로 실행됩니다. 만들어냈습니다.
핵심 단어외부이다 SQL 적합성은 허용되지만 선택 사항입니다. SQL과 달리 이 기능은 SQL이 아닌 모든 함수에 적용됩니다. 외부에만 있습니다.
예상 실행 비용을 나타내는 양수 함수의 경우 단위는cpu_operator_cost. 함수가 집합을 반환하는 경우 이는 당 비용입니다. 반환된 행. 비용을 명시하지 않은 경우 1단위는 C 언어 및 내부 기능에 대해 가정되며 100 다른 모든 언어의 기능에 대한 단위입니다. 더 큰 값 기획자가 기능 평가를 피하려고 시도하게 만듭니다. 필요 이상으로 자주.
예상 행 수를 제공하는 양수 플래너는 함수가 반환될 것으로 예상해야 합니다. 이 함수가 다음을 반환하도록 선언된 경우에만 허용됩니다. 설정합니다. 기본 가정은 1000행입니다.
그SET절로 인해 로 설정되도록 지정된 구성 매개변수 함수가 입력될 때 지정된 값을 입력한 다음 함수가 종료되면 이전 값으로 복원됩니다.현재부터 설정저장합니다 세션의 현재 매개변수 값을 값으로 사용합니다. 함수가 입력되면 적용됩니다.
참조PostgreSQL : 문서 : 8.3 : 토토 캔그리고토토 핫 : 문서 : 8.3 : 서버 토토 핫더 보기 허용되는 매개변수 이름 및 값에 대한 정보입니다.
함수를 정의하는 문자열 상수; 의미 언어에 따라 다릅니다. 내부 기능일 수 있습니다. 이름, 개체 파일의 경로, SQL 명령 또는 텍스트 절차적 언어로.
이 형식은AS절은 동적으로 로드 가능한 C 언어 함수에 사용됩니다. C 언어 소스 코드의 함수 이름이 동일하지 않습니다. SQL 함수의 이름으로. 문자열obj_file파일 이름입니다 동적으로 로드 가능한 객체를 포함하고, 그리고link_symbol함수 링크입니다 기호, 즉 C 언어의 함수 이름 소스 코드. 링크기호가 생략된 경우로 간주 SQL 함수의 이름과 동일해야 합니다. 정의되었습니다.
선택적인 부분을 지정하는 역사적 방법 기능에 대한 정보입니다. 다음 속성 여기에 나타날 수 있습니다:
다음과 동일함STRICT또는NULL에 대해 NULL을 반환합니다. 입력.
isCachable구식입니다 에 해당함불변; 이전 버전과의 호환성을 위해 여전히 허용됩니다. 이유.
속성 이름은 대소문자를 구분하지 않습니다.
참조PostgreSQL : 문서 : 8.3 : 사용자 범퍼카 토토 범퍼카 토토더 자세히 알아보기 쓰기 기능에 대한 정보입니다.
전체SQL유형 구문은 다음과 같습니다. 입력 인수 및 반환 값에 허용됩니다. 그러나 일부 유형 사양의 세부정보(예: 정밀도 필드 유형숫자)의 책임은 다음과 같습니다. 기본 기능 구현 및 자동으로 삼켜집니다. (즉, 인식되거나 시행되지 않음)함수 생성명령.
PostgreSQL무지개 토토 허용오버로딩; 즉, 같은 이름이 될 수 있습니다. 여러 다른 기능을 가지고 있는 한 사용할 수 있습니다. 인수 유형이 다릅니다. 그러나 모든 함수의 C 이름은 달라야 하므로 오버로드된 C 함수를 제공해야 합니다. 다른 C 이름(예를 들어 인수 유형을 C 이름).
두 함수가 동일하면 동일한 것으로 간주됩니다. 이름과입력인수 유형, 모두 무시밖으로매개변수. 따라서 예를 들어 이러한 선언은 충돌합니다.
함수 생성 foo(int) ... 함수 만들기 foo(int, out text) ...
반복할 때함수 생성호출 동일한 객체 파일을 참조하면 파일은 한 번만 로드됩니다. 세션. 파일을 언로드하고 다시 로드하려면(아마도 작업 중에 개발), 새 세션을 시작하세요.
사용드롭 무지개 토토사용자 정의 함수를 제거합니다.
달러 인용을 사용하는 것이 종종 도움이 됩니다(참조섹션 4.1.2.2) 대신 함수 정의 문자열을 작성합니다. 일반적인 작은따옴표 구문. 달러 인용 없이는 함수 정의에서 작은따옴표나 백슬래시는 다음과 같아야 합니다. 두 배로 늘려서 탈출했습니다.
만약에SET절이 다음에 첨부되었습니다. 함수, 다음의 효과는SET 로컬동일한 함수 내에서 실행되는 명령 변수는 기능으로 제한됩니다: 구성 매개변수의 이전 값은 함수 종료 시 여전히 복원됩니다. 그러나 평범한SET명령 (없이로컬)은를 재정의합니다.SET절, 이전과 마찬가지로로컬 설정명령: 그러한 효과 명령은 현재 명령이 실행되지 않는 한 함수 종료 후에도 지속됩니다. 트랜잭션이 롤백되었습니다.
기능을 정의하려면 사용자는 다음을 가지고 있어야 합니다.사용언어에 대한 권한입니다.
언제함수 생성 또는 교체이다 기존 기능, 소유권 및 함수의 권한은 변경되지 않습니다. 기타 모든 기능 속성에는 지정되거나 암시된 값이 할당됩니다. 명령. 이를 대체하려면 해당 기능을 소유해야 합니다(여기에는 다음이 포함됩니다). 소유 역할의 구성원임).
다음은 시작하는 데 도움이 되는 몇 가지 간단한 예입니다. 에 대한 자세한 내용과 예시는 참조하세요.PostgreSQL : 문서 : 8.3 : 사용자 범퍼카 토토 범퍼카 토토.
CREATE FUNCTION add(정수, 정수) RETURNS 정수
AS '$1 + $2 선택;'
언어 SQL
불변
NULL 입력 시 NULL을 반환합니다.
인수 이름을 사용하여 정수를 증가시킵니다.PL/pgSQL:
CREATE OR REPLACE FUNCTION 증분(i 정수) $$로 정수를 반환합니다.
시작
RETURN i + 1;
끝;
$$ 언어 plpgsql;
여러 출력 매개변수가 포함된 레코드를 반환합니다:
CREATE FUNCTION dup(in int, out f1 int, out f2 텍스트)
AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
언어 SQL;
SELECT * FROM dup(42);
명시적으로 동일한 작업을 더 장황하게 수행할 수 있습니다. 명명된 복합 유형:
CREATE TYPE dup_result AS(f1 int, f2 텍스트);
함수 생성 dup(int)는 dup_result를 반환합니다.
AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
언어 SQL;
SELECT * FROM dup(42);
왜냐면 a보안 정의자함수 그것을 생성한 사용자의 권한으로 실행되므로 주의 기능이 오용되지 않도록 보장하는 것이 필요합니다. 에 대한 보안,검색_경로신뢰할 수 없는 사용자가 쓸 수 있는 모든 스키마를 제외하도록 설정해야 합니다. 이를 통해 악의적인 사용자가 마스크 개체를 생성하는 것을 방지할 수 있습니다. 함수에서 사용하는 객체입니다. 이 점에서 특히 중요한 는 임시 테이블 스키마이며, 먼저 검색됩니다. 기본값이며 일반적으로 누구나 쓸 수 있습니다. 안전한 배치 임시 스키마를 마지막에 검색하도록 강제하여 가질 수 있습니다. 이렇게 하려면 다음을 작성하세요.pg_temp마지막으로 입장검색_경로. 이 기능 안전한 사용법을 보여줍니다:
CREATE FUNCTION check_password(TEXT 이름 취소, TEXT 전달)
부울을 $$로 반환합니다.
DECLARE가 BOOLEAN을 통과했습니다.
시작
SELECT (pwd = $2) INTO가 전달되었습니다.
비밀번호에서
사용자 이름 = $1;
반환이 통과되었습니다.
끝;
$$ 언어 plpgsql
보안 정의자
-- 보안 검색_경로(신뢰할 수 있는 스키마, 'pg_temp')를 설정합니다.
SET search_path = 관리자, pg_temp;
이전포스트그레SQL버전 8.3,SET옵션을 사용할 수 없습니다. 따라서 오래된 함수에는 다소 복잡한 논리가 포함될 수 있습니다. 저장, 설정 및 복원검색_경로.SET옵션을 사용하는 것이 훨씬 쉽습니다. 목적.
유념해야 할 또 다른 점은 기본적으로 다음을 실행한다는 것입니다. 특권이 부여됩니다공개새로 생성된 함수(참조그랜트자세한 정보는). 자주 당신은 보안 정의자 기능의 사용을 다음으로 제한하고 싶을 것입니다. 일부 사용자. 그렇게 하려면 기본값을 취소해야 합니다.공개권한을 부여한 다음 실행 권한을 부여합니다. 선택적으로. 새 기능이 있는 창을 피하려면 모두가 액세스할 수 있도록 만들고 생성한 후 권한을 설정하세요. 단일 거래. 예를 들면:
시작; CREATE FUNCTION check_password(TEXT 이름 변경, TEXT 전달) ... 보안 정의자; PUBLIC에서 함수의 모든 항목을 취소합니다. check_password(TEXT 이름 변경, TEXT 전달); 관리자에게 함수에 대한 실행 권한을 부여합니다. check_password(TEXT 이름 바꾸기, TEXT 전달); 커밋;