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

만들기 토토 사이트 추천

이름

CREATE FUNCTION -- 새 함수 정의

시놉시스

토토 사이트 추천 생성 [ 또는 교체 ]이름 ( [ [ argmode ] [ 인수이름 ] argtype[  기본 | =defexpr] [, ...] ] )
    [ 반품재입력| 반환 테이블(열이름 콜타입[, ...] ) ]
   언어언어명| 창문
    | 불변 | 안정적 | 휘발성 물질
    | NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격한
    | [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자
    | 비용execution_cost| 행결과_행| 세트configuration_parameter받는 사람 | = | 현재부터 
    | 처럼 '정의'
    | 처럼 'obj_file', 'link_symbol'
   ...
    [ 와 함께 (속성 [, ...] ) ]

설명

함수 생성새로운 것을 정의합니다 기능.함수 생성 또는 교체새 기능을 생성하거나 기존 기능을 대체합니다. 정의.

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

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

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

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

매개변수

이름

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

argmode

인수의 모드:IN, 아웃, INOUT또는VARIADIC. 생략하면 기본값은IN. 오직밖으로인수는 다음과 같습니다.VARIADIC하나. 또한,아웃그리고INOUT인수는 다음과 함께 사용할 수 없습니다.반품 테이블표기법.

인수이름

인수의 이름. 일부 언어(포함 PL/pgSQL(현재는 SQL이 아님)에서 이름을 사용할 수 있습니다. 함수 본체. 다른 언어의 경우 입력 이름 인수는 단지 추가 문서일 뿐입니다. 그러나 이름은 출력 인수는 열을 정의하므로 중요합니다. 결과 행 유형의 이름입니다. (이름을 생략한 경우 출력 인수가 있으면 시스템은 기본 열을 선택합니다. 이름.)

argtype

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

구현 언어에 따라 지정할 수 있습니다"유사형"예:cstri토토 사이트 추천. 유사 유형은 실제 인수 유형이 불완전하게 지정되었거나 범위를 벗어났습니다. 일반적인 SQL 데이터 유형의 집합입니다.

열의 유형은 쓰기로 참조됩니다.테이블 이름.열 이름%TYPE. 이것을 사용하여 기능은 때때로 기능을 독립적으로 만드는 데 도움이 될 수 있습니다. 테이블 정의가 변경되었습니다.

defexpr

다음 경우 기본값으로 사용될 표현식입니다. 매개변수가 지정되지 않았습니다. 표현은 이렇게 해야지 매개변수의 인수 유형으로 강제할 수 있습니다. 입력만 가능 (포함INOUT) 매개변수는 기본값을 가지고 있습니다. 다음의 모든 입력 매개변수 기본값이 있는 매개변수에는 다음과 같은 기본값이 있어야 합니다. 잘.

재입력

반환 데이터 유형(선택적으로 스키마 한정). 그만큼 반환 유형은 기본, 복합 또는 도메인 유형일 수 있습니다. 테이블 열의 유형을 참조할 수 있습니다. 에 따라 구현 언어를 지정할 수도 있습니다."유사형"예를 들어cstri토토 사이트 추천. 토토 사이트 추천이 작동하지 않는 경우 값을 반환하고 지정하십시오.무효으로 반환 유형입니다.

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

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

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

열이름

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

콜타입

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

언어명

함수가 속한 언어의 이름 에서 구현되었습니다. 가능합니다SQL, C, 내부또는 사용자 정의 이름 절차적 언어. 이전 버전과의 호환성을 위해 이름은 작은따옴표로 묶을 수 있습니다.

은 다음을 나타냅니다. 함수는창 토토 사이트 추천일반 함수가 아닙니다. 이것은 현재 유용합니다. C로 작성된 함수의 경우.다음 경우에는 속성을 변경할 수 없습니다. 기존 함수 정의를 대체합니다.

불변
안정적
휘발성

이러한 속성은 쿼리 최적화 프로그램에 함수의 동작. 최대 1개의 선택이 가능합니다. 지정. 이들 중 어느 것도 나타나지 않으면,휘발성기본 가정입니다.

불변다음을 나타냅니다. 함수는 데이터베이스를 수정할 수 없으며 항상 동일한 인수 값이 주어지면 동일한 결과가 나타납니다. 즉, 데이터베이스 조회를 수행하거나 다른 방식으로 사용하지 않습니다. 인수 목록에 직접적으로 존재하지 않는 정보. 만약에 이 옵션이 주어지면 다음을 사용하여 함수를 호출할 수 있습니다. 모든 상수 인수는 즉시 다음으로 대체될 수 있습니다. 함수 값입니다.

안정적다음을 나타냅니다. 함수는 데이터베이스를 수정할 수 없으며 단일 테이블 스캔은 일관되게 동일한 결과를 반환합니다. 동일한 인수 값에 대한 결과이지만 그 결과는 SQL 문 전체에서 변경될 수 있습니다. 이는 적절한 결과가 데이터베이스에 따라 달라지는 함수 선택 조회, 매개변수 변수(예: 현재 시간 영역) 등. 또한 다음 사항에 유의하세요.현재_타임스탬프함수 계열 그 값이 내부적으로 변하지 않기 때문에 안정적인 것으로 간주됩니다. 거래.

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

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

NULL 입력 시 호출됨
NULL 입력 시 NULL을 반환
STRICT

NULL 입력 시 호출됨( 기본값)은 함수가 호출될 것임을 나타냅니다. 일반적으로 인수 중 일부가 null인 경우입니다. 그때이다 null을 확인하는 함수 작성자의 책임 필요한 경우 가치를 평가하고 적절하게 대응하세요.

NULL 입력 시 NULL을 반환합니다.또는STRICT함수를 나타냅니다. 인수 중 하나라도 null일 때마다 항상 null을 반환합니다. 이 매개변수를 지정하면 함수가 작동하지 않습니다. null 인수가 있을 때 실행됩니다. 대신 null 결과는 자동으로 가정됩니다.

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

보안 호출자다음을 나타냅니다. 이 기능은 다음의 권한으로 실행됩니다. 그것을 호출하는 사용자. 그게 기본값이에요.보안 정의자함수를 지정합니다. 해당 사용자의 권한으로 실행됩니다. 만들어냈습니다.

핵심 단어외부이다 SQL 적합성은 허용되지만 선택 사항입니다. SQL과 달리 이 기능은 SQL이 아닌 모든 함수에 적용됩니다. 외부에만 있습니다.

execution_cost

예상 실행 비용을 나타내는 양수 함수의 경우 단위는cpu_operator_cost. 함수가 집합을 반환하는 경우 이는 당 비용입니다. 반환된 행. 비용을 명시하지 않은 경우 1단위는 C 언어 및 내부 기능에 대해 가정되며 100 다른 모든 언어의 기능에 대한 단위입니다. 더 큰 값 기획자가 기능 평가를 피하려고 시도하게 만듭니다. 필요 이상으로 자주.

결과_행

예상 행 수를 나타내는 양수 플래너는 함수가 반환될 것으로 예상해야 합니다. 이것 함수가 다음을 반환하도록 선언된 경우에만 허용됩니다. 세트. 기본 가정은 1000행입니다.

configuration_parameter

SET절로 인해 로 설정되도록 지정된 구성 매개변수 함수가 입력될 때 지정된 값을 입력한 다음 함수가 종료되면 이전 값으로 복원됩니다.현재부터 설정저장합니다 세션의 현재 매개변수 값을 값으로 사용합니다. 함수가 입력되면 적용됩니다.

참조PostgreSQL : 문서 : 8.4 : 사설 토토그리고스포츠 토토 결과 : 문서 : 8.4 : 서버 구성더 보기 허용되는 매개변수 이름 및 값에 대한 정보입니다.

정의

함수를 정의하는 문자열 상수; 의미 언어에 따라 다릅니다. 내부 기능일 수 있습니다. 이름, 개체 파일의 경로, SQL 명령 또는 텍스트 절차적 언어로.

obj_file, link_symbol

이 형식은AS절은 동적으로 로드 가능한 C 언어 함수에 사용됩니다. C 언어 소스 코드의 함수 이름이 동일하지 않습니다. SQL 함수의 이름으로. 문자열obj_file파일 이름입니다 동적으로 로드 가능한 객체를 포함하고, 그리고link_symbol함수 링크입니다 기호, 즉 C 언어의 함수 이름 소스 코드. 링크기호가 생략된 경우로 간주 SQL 함수의 이름과 동일해야 합니다. 한정된.

속성

선택적인 부분을 지정하는 역사적 방법 기능에 대한 정보입니다. 다음 속성 여기에 나타날 수 있습니다:

isStrict

다음과 동일함STRICT또는NULL에 대해 NULL을 반환합니다. 입력.

isCachable

isCachable구식입니다 에 해당함불변; 이전 버전과의 호환성을 위해 여전히 허용됩니다. 이유.

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

참고

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

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

포스트그레SQL토토 사이트 추천 허용오버로딩; 즉, 같은 이름이 될 수 있습니다. 여러 다른 기능을 가지고 있는 한 사용할 수 있습니다. 고유한 입력 인수 유형. 그러나 모든 C 이름은 함수는 달라야 하므로 오버로드된 C를 제공해야 합니다. 함수 다른 C 이름(예: 인수 유형 사용) C 이름의 일부로).

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

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

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

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

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

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

사용드롭 토토 사이트 추천사용자 정의 함수를 제거합니다.

달러 인용을 사용하는 것이 도움이 되는 경우가 많습니다(참조섹션 4.1.2.4) 대신 함수 정의 문자열을 작성합니다. 일반적인 작은따옴표 구문. 달러 인용 없이는 함수 정의에서 작은따옴표나 백슬래시는 다음과 같아야 합니다. 두 배로 늘려서 탈출했습니다.

만약에SET절이 다음에 첨부되었습니다. 함수, 다음의 효과는SET 현지의동일한 함수 내에서 실행되는 명령 변수는 기능으로 제한됩니다: 구성 매개변수의 이전 값은 함수 종료 시 여전히 복원됩니다. 그러나 평범한SET명령 (없이로컬)는를 재정의합니다.SET절, 이전과 마찬가지로로컬 설정명령: 그러한 효과 명령은 현재 명령이 실행되지 않는 한 함수 종료 후에도 지속됩니다. 트랜잭션이 롤백되었습니다.

기능을 정의하려면 사용자는 다음을 가지고 있어야 합니다.사용언어에 대한 권한입니다.

언제함수 생성 또는 교체이다 기존 기능, 소유권 및 함수의 권한은 변경되지 않습니다. 기타 모든 기능 속성에는 지정되거나 암시된 값이 할당됩니다. 명령. 이를 대체하려면 해당 기능을 소유해야 합니다(여기에는 다음이 포함됩니다). 소유 역할의 구성원임).

함수가 선언된 경우엄격와 함께 에이VARIADIC인수, 엄격함 가변 배열을 테스트하는지 확인하세요.전체적으로은 null이 아닙니다. 그만큼 배열에 null 요소가 있으면 함수가 계속 호출됩니다.

다음은 시작하는 데 도움이 되는 몇 가지 간단한 예입니다. 을 위한 자세한 내용과 예시는 참조하세요.PostgreSQL : 문서 : 8.4 : 사용자 토토 함수.

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옵션을 사용하는 것이 훨씬 쉽습니다. 목적.

유념해야 할 또 다른 점은 기본적으로 다음을 실행한다는 것입니다. 특권이 부여됩니다공개새로 생성된 함수(참조부여자세한 정보는). 자주 당신은 보안 정의자 기능의 사용을 다음으로 제한하고 싶을 것입니다. 일부 사용자. 그렇게 하려면 기본값을 취소해야 합니다.공개권한을 부여한 다음 실행 권한을 부여합니다. 선택적으로. 새 기능이 있는 창을 피하려면 모두가 액세스할 수 있도록 만들고 생성한 후 권한을 설정하세요. 단일 거래. 예를 들어:

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

호환성

A 함수 생성명령이 정의되었습니다 SQL:1999 이상에서. 그만큼PostgreSQL버전이 비슷하지만 완전하지는 않습니다. 호환 가능. 속성은 이식성이 없으며 이식성이 없습니다. 사용 가능한 언어가 다릅니다.

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

SQL 표준은 매개변수 기본값을 지정하지 않습니다. 그만큼 를 사용한 구문기본값키워드는 다음에서 온 것입니다. Oracle이며 이는 SQL/PSM 표준의 정신과 어느 정도 일치합니다. 변수 기본값에 사용합니다. 의 구문=T-SQL 및 Firebird에서 사용됩니다.