이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 스포츠 토토 결과 만들기버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

만들기 젠 토토

이름

CREATE FUNCTION -- 새 함수 정의

시놉시스

젠 토토 생성 [ 또는 교체 ]이름 ( [ [ argmode ] [ argname ] argtype[  기본 | =default_expr] [, ...] ] )
    [ 반품재입력| 반환 테이블(컬럼_이름 열_유형[, ...] ) ]
   언어lang_name| 창
    | 불변 | 안정적 | 휘발성 | [ 아님 ] 누출 방지
    | NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격
    | [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자
    | 비용execution_cost| 행결과_행| 설정configuration_parameter받는 사람 | = | 현재부터 
    | 그대로 '정의'
    | 그대로 'obj_file', 'link_symbol'
   ...
    [ 와 (속성 [, ...] ) ]

설명

함수 생성새 기능을 정의합니다.함수 생성 또는 교체둘 중 하나입니다 새 함수를 만들거나 기존 정의를 바꿉니다. 될 함수를 정의하려면 사용자에게 다음이 있어야 합니다.사용언어에 대한 권한입니다.

스키마 이름이 포함되면 함수는 다음에 생성됩니다. 지정된 스키마. 그렇지 않으면 현재에 생성됩니다. 스키마. 새 함수의 이름은 기존 함수와 일치하면 안 됩니다. 동일한 스키마에서 동일한 입력 인수 유형을 사용하는 함수입니다. 그러나 다양한 인수 유형의 함수는 이름을 공유할 수 있습니다. (이것을 호출합니다.오버로딩).

기존 함수의 현재 정의를 바꾸려면 다음을 사용하십시오.함수 생성 또는 교체. 그렇지 않다 함수의 이름이나 인수 유형을 변경할 수 있습니다. 방식으로(시도한다면 실제로는 새롭고 고유한 기능). 또한,생성 또는 교체 젠 토토귀하의 반환 유형을 변경할 수 없습니다. 기존 기능. 그렇게 하려면 기능. (사용시아웃매개변수, 그 유형을 변경할 수 없음을 의미합니다.아웃함수 삭제를 제외한 매개변수.)

언제함수 생성 또는 교체사용됩니다 기존 기능을 대체하려면 기능은 변경되지 않습니다. 다른 모든 함수 속성은 다음과 같습니다. 명령에 지정되거나 암시된 값을 할당합니다. 당신은해야합니다 이를 대체할 기능을 소유합니다(여기에는 소유 역할).

함수를 삭제한 후 다시 생성하면 새 함수는 다음과 같습니다. 예전과 같은 실체가 아닙니다. 기존 항목을 삭제해야 합니다. 이전 함수를 참조하는 규칙, 보기, 트리거 등. 사용함수 생성 또는 교체변경하려면 참조하는 객체를 중단하지 않고 함수 정의 기능. 또한,함수 변경사용 가능 기존의 보조 속성 대부분을 변경하려면 기능.

함수를 생성한 사용자는 다음의 소유자가 됩니다. 기능.

함수를 생성하려면 다음이 있어야 합니다.사용인수 유형 및 반환에 대한 권한 유형.

매개변수

이름

함수의 이름(선택적으로 스키마 한정) 생성합니다.

argmode

인수의 모드:IN, 아웃, INOUT또는VARIADIC. 생략하면 기본값은IN. 만아웃인수 가능 따라가세요VARIADIC하나. 또한,아웃그리고INOUT인수 와 함께 사용할 수 없습니다.반환 표표기법.

argname

인수의 이름. 일부 언어(SQL 및 PL/pgSQL)에서는 함수 본문에 이름을 사용할 수 있습니다. 기타 언어 입력 인수의 이름은 단지 추가입니다. 기능 자체에 관한 한 문서화; 하지만 당신은 개선을 위해 함수를 호출할 때 입력 인수 이름을 사용할 수 있습니다. 가독성(참조PostgreSQL : 문서 : 9.3 : 롤 토토 호출). 어쨌든 출력 인수의 이름은 다음과 같습니다. 결과 행의 열 이름을 정의하기 때문에 중요합니다. 유형. (출력 인수의 이름을 생략하면 시스템은 기본 열 이름을 선택하세요.)

argtype

함수 인수의 데이터 유형(선택 사항) 스키마 한정)(있는 경우). 인수 유형은 기본일 수 있습니다. 복합 또는 도메인 유형이거나 테이블 유형을 참조할 수 있습니다. 열.

구현 언어에 따라 다음과 같을 수도 있습니다. 지정할 수 있음"유사형"예:cstring. 유사 유형은 실제 인수 유형이 불완전하게 지정되었거나 집합 외부에 있습니다. 일반적인 SQL 데이터 유형입니다.

열의 유형은 쓰기로 참조됩니다.테이블_이름.열_이름%TYPE. 이 기능을 사용하면 때로는 변경 사항에 관계없이 기능을 독립적으로 만드는 데 도움이 됩니다. 테이블의 정의.

default_expr

매개변수가 다음인 경우 기본값으로 사용될 표현식입니다. 지정되지 않았습니다. 표현은 논증에 강제될 수 있어야 한다 매개변수의 유형입니다. 입력만(포함INOUT) 매개변수는 기본값을 가질 수 있습니다. 모두 기본값이 있는 매개변수 뒤에 오는 입력 매개변수는 다음과 같습니다. 기본값도 있습니다.

재입력

반환 데이터 유형(선택적으로 스키마 한정). 반환 유형은 기본, 복합 또는 도메인 유형일 수 있거나 테이블 열의 유형입니다. 구현 언어에 따라 지정할 수도 있습니다."유사형"예를 들어cstring. 함수가 값을 반환하지 않아야 하는 경우 다음을 지정하십시오.무효반환 유형으로.

있을 때아웃또는INOUT매개변수,반환절은 생략 가능합니다. 존재하는 경우 반드시 출력 매개변수가 암시하는 결과 유형에 동의합니다.기록여러 개의 출력이 있는 경우 매개변수 또는 단일 출력 매개변수와 동일한 유형입니다.

SETOF수정자는 다음을 나타냅니다. 함수는 단일 항목이 아닌 일련의 항목을 반환합니다.

열의 유형은 쓰기로 참조됩니다.테이블_이름.열_이름%TYPE.

열_이름

다음의 출력 열 이름반품 표구문. 이는 효과적으로 선언하는 또 다른 방법입니다. 명명된아웃매개변수, 제외반품 테이블또한 암시함SETOF 반환.

열_유형

출력 열의 데이터 유형반품 테이블구문.

lang_name

함수가 구현된 언어의 이름입니다. 될 수 있다SQL, C, 내부또는 사용자 정의 이름 절차적 언어. 이전 버전과의 호환성을 위해 이름은 다음과 같습니다. 작은따옴표로 묶습니다.

함수는 다음과 같습니다.창 젠 토토평범한 것이 아니라 기능. 이는 현재 C로 작성된 함수에만 유용합니다.속성은 변경할 수 없습니다. 기존 함수 정의를 바꿀 때.

불변
안정적
휘발성

이러한 속성은 쿼리 최적화 프로그램에 동작에 대한 정보를 제공합니다. 기능의. 최대 하나의 선택 항목을 지정할 수 있습니다. 다음 중 어느 것도 없는 경우 이것들이 나타납니다.휘발성기본값입니다 가정.

불변함수를 나타냅니다. 데이터베이스를 수정할 수 없으며 다음과 같은 경우 항상 동일한 결과를 반환합니다. 동일한 인수 값이 주어지면; 즉, 데이터베이스를 수행하지 않습니다. 조회 또는 기타 방법으로 해당 사이트에 직접적으로 존재하지 않는 정보를 사용합니다. 인수 목록. 이 옵션이 주어지면 모든 함수 호출은 모두 상수 인수를 사용하면 즉시 다음으로 대체될 수 있습니다. 함수 값입니다.

안정적함수를 나타냅니다. 데이터베이스를 수정할 수 없으며 단일 테이블 내에서 데이터베이스를 스캔합니다. 동일한 인수에 대해 일관되게 동일한 결과를 반환합니다. 값이 있지만 그 결과는 SQL 문 전체에서 변경될 수 있습니다. 이는 결과가 다음과 같은 기능에 적합한 선택입니다. 데이터베이스 조회, 매개변수 변수(예: 현재 시간대) 등(다음에는 부적절합니다.이후다음에 의해 수정된 행을 쿼리하려는 트리거 현재 명령입니다.) 또한현재_타임스탬프함수 계열은 다음과 같습니다. 트랜잭션 내에서 값이 변경되지 않으므로 안정적입니다.

휘발성함수를 나타냅니다. 단일 테이블 스캔 내에서도 값이 변경될 수 있으므로 최적화가 이루어질 수 있습니다. 데이터베이스 기능은 상대적으로 적습니다. 이런 의미에서 휘발성입니다. 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday(). 하지만 어떤 기능이든 부작용이 있는 경우에도 휘발성으로 분류되어야 합니다. 호출이 최적화되는 것을 방지하기 위해 결과는 상당히 예측 가능합니다. 멀리; 예는 다음과 같습니다setval().

자세한 내용은 참조섹션 35.6.

누출 방지

누출방지함수를 나타냅니다. 부작용이 없습니다. 주장에 대한 정보를 공개하지 않습니다. 반환 값 외에는. 예를 들어, 다음과 같은 함수가 있습니다. 일부 인수 값에 대해서는 오류 메시지가 발생하지만 다른 인수 값에는 오류 메시지가 발생하지 않습니다. 오류 메시지의 인수 값을 포함하는 것은 아닙니다. 누출 방지. 쿼리 플래너는 누출 방지 기능을 푸시할 수 있습니다(그러나 기타)를 사용하여 생성된 뷰로security_barrier옵션. 참조보기 만들기그리고섹션 38.5. 이 옵션은 다음과 같습니다. 수퍼유저가 설정합니다.

NULL 입력 시 호출됨
NULL 입력 시 NULL을 반환합니다.
STRICT

NULL 입력 시 호출됨(기본값) 은 함수가 정상적으로 호출될 것임을 나타냅니다. 해당 인수가 null입니다. 그러면 함수 작성자의 것입니다. 필요한 경우 null 값을 확인하고 응답할 책임 적절하게.

NULL 입력 시 NULL을 반환합니다.또는엄격함수는 항상 인수 중 하나라도 null일 때마다 null을 반환합니다. 만약 이 매개변수가 지정되어 있으면 함수가 실행되지 않습니다. 널 인수; 대신 null 결과가 자동으로 가정됩니다.

[외부] 보안 호출자
[외부] 보안 정의자

보안 호출자은 다음을 나타냅니다. 기능은 해당 사용자의 권한으로 실행됩니다. 그것을 부른다. 그게 기본값이에요.보안 정의자함수가 다음과 같이 실행되도록 지정합니다. 그것을 만든 사용자의 권한.

핵심 단어외부다음에 대해 허용됩니다. SQL 규격을 따르지만 SQL과 달리 선택 사항입니다. 기능은 외부 기능뿐만 아니라 모든 기능에 적용됩니다.

execution_cost

다음에 대한 예상 실행 비용을 제공하는 양수입니다. 함수, 단위cpu_operator_cost. 함수가 집합을 반환하는 경우 이는 반환된 행당 비용입니다. 비용을 명시하지 않은 경우 C언어는 1단위로 가정하고, 내부 기능, 기타 모든 기능의 경우 100개 단위 언어. 값이 클수록 계획자는 다음을 피하려고 합니다. 필요한 것보다 더 자주 함수를 평가합니다.

결과_행

행의 예상 개수를 제공하는 양수 플래너는 함수가 반환될 것으로 예상해야 합니다. 이것만 허용됩니다 함수가 집합을 반환하도록 선언된 경우. 기본값 행은 1000개라고 가정합니다.

configuration_parameter

세트절로 인해 지정된 구성 매개변수는 다음과 같은 경우 지정된 값으로 설정됩니다. 기능이 입력된 다음, 다음과 같은 경우 이전 값으로 복원됩니다. 함수가 종료됩니다.현재부터 설정저장합니다 다음의 경우 현재 매개변수 값입니다.함수 생성이 될 값으로 실행됩니다. 함수가 입력되면 적용됩니다.

만약에SET절이 다음에 첨부되었습니다. 함수, 다음의 효과는로컬 설정25316_25509SET명령(없음로컬)는를 재정의합니다.SET절, 이전과 마찬가지로SET 로컬명령: 해당 명령의 효과는 지속됩니다 함수 종료 후, 현재 트랜잭션이 롤링되지 않는 한 뒤로.

참조스포츠 토토 : 문서 : 9.3 : set그리고18장자세한 내용은 다음과 같습니다. 허용되는 매개변수 이름 및 값입니다.

정의

함수를 정의하는 문자열 상수; 의미는 다음에 달려있다 언어. 내부 함수 이름, 경로 개체 파일, SQL 명령 또는 절차적 언어로 된 텍스트입니다.

달러 인용을 사용하는 것이 도움이 되는 경우가 많습니다(참조섹션 4.1.2.4) 대신 함수 정의 문자열을 작성합니다. 일반적인 작은따옴표 구문. 달러 인용 없이, 어떤 단일 함수 정의의 따옴표나 백슬래시는 다음으로 이스케이프되어야 합니다. 두 배로 늘리세요.

obj_file, link_symbol

이 형식은AS절은 다음 용도로 사용됩니다. 함수 이름이 다음과 같은 경우 동적으로 로드 가능한 C 언어 함수 C 언어 소스 코드가 SQL 이름과 동일하지 않습니다. 기능. 문자열obj_file이다 동적으로 로드 가능한 객체를 포함하는 파일의 이름, 그리고link_symbol함수는 링크 기호, 즉 C 언어의 함수 이름 소스 코드. 링크 기호가 생략된 경우 링크 기호로 간주됩니다. 정의되는 SQL 함수의 이름과 동일합니다. C 이름의 모든 기능은 달라야 하므로 오버로드된 C를 제공해야 합니다. 함수는 다른 C 이름을 사용합니다(예를 들어 인수 유형을 다음과 같이 사용합니다). C 이름의 일부).

반복되는 경우함수 생성호출 동일한 객체 파일을 참조하면 파일은 한 번만 로드됩니다. 세션. 파일을 언로드하고 다시 로드하려면(아마도 작업 중에 개발), 새 세션을 시작하세요.

속성

선택적 정보를 지정하는 역사적 방법 기능에 대해. 여기에는 다음 속성이 나타날 수 있습니다.

isStrict

다음과 동일함STRICT또는NULL 입력 시 NULL 반환.

isCachable

isCachable은 다음과 더 이상 사용되지 않는 값입니다.불변; 아직까지는 받아들여지고 있어요 이전 버전과의 호환성 이유.

속성 이름은 대소문자를 구분하지 않습니다.

참조PostgreSQL : 문서 : 9.3 : 사용자 스포츠 토토 함수더 자세히 알아보기 쓰기 기능에 대한 정보입니다.

오버로딩

PostgreSQL젠 토토 허용오버로딩; 즉, 같은 이름이 될 수 있습니다. 서로 다른 여러 기능에 사용됩니다. 입력 인수 유형. 사용하든 안하든 이 기능은 데이터베이스에서 함수를 호출할 때 보안 예방 조치가 필요합니다. 일부 사용자는 다른 사용자를 불신합니다. 참조섹션 10.3.

두 기능이 동일하면 동일한 것으로 간주됩니다. 이름과입력인수 유형, 모두 무시OUT매개변수. 따라서 예를 들어 다음 선언은 충돌합니다.

함수 생성 foo(int) ...
함수 만들기 foo(int, out text) ...

다른 인수 유형 목록을 가진 함수는 생성 시 충돌로 간주되지만 기본값이 단, 사용 중 충돌이 발생할 수 있습니다. 예를 들어 다음을 고려하세요.

함수 생성 foo(int) ...
함수 생성 foo(int, int 기본값 42) ...

전화foo(10)다음으로 인해 실패할 것입니다. 어떤 함수를 호출해야 하는지에 대한 모호함.

참고

전체SQL유형 구문은 다음과 같습니다. 함수의 인수와 반환 값을 선언하는 것이 허용됩니다. 그러나 괄호로 묶인 유형 수정자(예: 정밀도 필드 유형에 대해숫자)는에 의해 삭제됩니다.함수 생성. 따라서 예를 들면Foo 함수 생성(varchar(10)) ...정확히는 와 동일CREATE 함수 foo(varchar) ....

기존 함수를 다음으로 대체할 때함수 생성 또는 교체, 제한사항이 있습니다 매개변수 이름 변경에 대해 이미 이름을 변경할 수 없습니다. 입력 매개변수에 할당됨(이름을 추가할 수 있음) 이전에는 매개변수가 없었습니다). 출력이 2개 이상인 경우 매개변수의 경우 출력 매개변수의 이름을 변경할 수 없습니다. 익명의 열 이름이 변경되기 때문입니다. 함수의 결과를 설명하는 복합 유형입니다. 이것들 함수의 기존 호출이 보장되도록 제한이 적용됩니다. 교체 후에도 작동을 멈추지 마십시오.

함수가 선언된 경우STRICTVARIADIC인수, 엄격성 검사 가변 배열을 테스트합니다.다음과 같이 전체은 null이 아닙니다. 다음과 같은 경우에도 함수가 호출됩니다. 배열에 null 요소가 있습니다.

다음은 시작하는 데 도움이 되는 몇 가지 간단한 예입니다. 더 알아보기 정보 및 예시는 참조PostgreSQL : 문서 : 9.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);

여러 열을 반환하는 또 다른 방법은 다음을 사용하는 것입니다.젠 토토:

함수 생성 dup(int) 반환 테이블(f1 int, f2 text)
    AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
    언어 SQL;

SELECT * FROM dup(42);

그러나 a함수가 다릅니다 이전 예제에서 실제로는 다음을 반환하기 때문입니다.설정기록뿐만 아니라 하나의 기록.

쓰기보안 정의자젠 토토 안전하게

왜냐면 a보안 정의자함수는 그것을 생성한 사용자의 권한으로 실행되므로 주의가 필요합니다. 기능이 오용되지 않도록 보장하는 데 필요합니다. 보안을 위해,검색_경로해야 한다 신뢰할 수 없는 사용자가 쓸 수 있는 모든 스키마를 제외하도록 설정됩니다. 이 악의적인 사용자가 객체를 가리는 객체를 생성하는 것을 방지합니다. 함수에 의해 사용됩니다. 이와 관련하여 특히 중요한 것은 기본적으로 가장 먼저 검색되는 임시 테이블 스키마는 일반적으로 누구나 쓸 수 있습니다. 안전한 배치는 다음과 같이 할 수 있습니다. 임시 스키마를 마지막으로 검색하도록 강제합니다. 이렇게 하려면 다음을 작성하세요.pg_temp의 마지막 항목으로검색_경로. 이 기능은 안전을 보여줍니다. 사용법:

CREATE FUNCTION check_password(TEXT 이름 취소, TEXT 전달)
부울을 $$로 반환합니다.
DECLARE가 BOOLEAN을 통과했습니다.
시작
        SELECT (pwd = $2) INTO가 전달되었습니다.
        비밀번호에서
        사용자 이름 = $1;

        반환이 통과되었습니다.
끝;
$$ 언어 plpgsql
    보안 정의자
    -- 보안 검색_경로(신뢰할 수 있는 스키마, 'pg_temp')를 설정합니다.
    SET search_path = 관리자, pg_temp;

이전PostgreSQL버전 8.3,SET옵션을 사용할 수 없었습니다. 이전 함수에는 저장, 설정, 그리고 복원검색_경로.SET옵션을 사용하는 것이 훨씬 쉽습니다. 목적.

기억해야 할 또 다른 점은 기본적으로 다음을 실행한다는 것입니다. 특권이 부여됩니다공개새로 생성된 함수(참조PostgreSQL : 문서 : 9.3 : 윈 토토더 보기 정보). 종종 당신은 보안 정의자 기능은 일부 사용자에게만 제공됩니다. 그러기 위해서는 반드시 기본값을 취소합니다공개특권 및 그런 다음 선택적으로 실행 권한을 부여합니다. 창문이 생기지 않도록 모든 사람이 새 기능에 액세스할 수 있는 경우 이를 만들고 설정합니다. 단일 거래 내에서 특권. 예를 들면:

시작;
CREATE FUNCTION check_password(TEXT 이름 변경, TEXT 전달) ... 보안 정의자;
PUBLIC에서 함수의 모든 항목을 취소합니다. check_password(TEXT 이름 변경, TEXT 전달);
관리자에게 함수에 대한 실행 권한을 부여합니다. check_password(TEXT 이름 바꾸기, TEXT 전달);
저지르다;

호환성

A 함수 생성명령은 다음에 정의되어 있습니다. SQL:1999 이상.포스트그레SQL버전이 비슷하지만 완전히 호환되지는 않습니다. 속성은 다음과 같습니다. 이식 가능하며 사용 가능한 언어도 다릅니다.

다른 데이터베이스 시스템과의 호환성을 위해,argmode앞이나 뒤에 쓸 수 있습니다.argname. 하지만 첫 번째 방법은 표준을 준수합니다.

매개변수 기본값의 경우 SQL 표준은 를 사용한 구문기본값키워드. 는 구문=은 T-SQL에서 사용되며 파이어버드.