토토 핫 생성 [ 또는 교체 ]이름 ( [ argtype[, ...] ] )
반품재입력언어언어명| 불변 | 안정적 | 휘발성
| NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격
| [외부] 보안 호출자 | [외부] 보안 정의자
| 그대로 '정의'
| 그대로 'obj_file', 'link_symbol'
...
[ 와 (속성 [, ...] ) ]
함수 생성새로운 것을 정의합니다 기능.함수 생성 또는 교체새 기능을 생성하거나 기존 기능을 대체합니다. 정의.
함수를 생성한 사용자는 다음의 소유자가 됩니다. 기능.
매개변수
생성할 함수의 이름. 스키마 이름이 다음과 같은 경우 포함된 경우 지정된 위치에 함수가 생성됩니다. 스키마. 그렇지 않으면 현재 스키마에 생성됩니다( 하나는 검색 경로 앞에 있고; 참조CURRENT_SCHEMA()). 새로운 이름 함수는 동일한 기존 함수와 일치하면 안 됩니다. 동일한 스키마의 인수 유형. 그러나, 서로 다른 인수 유형이 이름을 공유할 수 있습니다(이것을 호출함)오버로딩).
함수 인수의 데이터 유형(있는 경우). 입력 유형은 기본, 복합 또는 도메인 유형일 수 있습니다. 기존 컬럼의 유형과 동일합니다. 유형 열은 쓰기로 참조됩니다.테이블 이름.열 이름%TYPE; 이것을 사용하면 때로는 정의의 변경과 독립적으로 기능합니다. 테이블. 구현 언어에 따라 지정할 수 있습니다"의사 유형"예:cstring. 의사 유형은 실제 인수 유형이 불완전하게 지정되었거나 범위를 벗어났습니다. 일반적인 SQL 데이터 유형의 집합입니다.
반환 데이터 유형. 반환 유형을 지정할 수 있습니다 기본, 컴플렉스 또는 도메인 유형으로 사용되거나 유형과 동일 기존 열의 구현에 따라 언어를 지정할 수도 있습니다."의사 유형"예를 들어cstring.setof수정자는 함수가 다음 세트를 반환함을 나타냅니다. 단일 항목이 아닌 항목입니다.
함수가 속한 언어의 이름 에 구현되었습니다. 아마도SQL, C, 내부또는 사용자 정의 이름 절차적 언어. (또한 참조createlang.) 이전 버전의 경우 호환성이 있으면 이름을 단일 문자로 묶을 수 있습니다. 인용문.
이러한 속성은 시스템에 안전한지 여부를 알려줍니다. 함수에 대한 여러 평가를 단일 평가로 대체 평가, 런타임 최적화를 위한 것입니다. 선택은 최대 1개 지정되어야 합니다. 이들 중 어느 것도 나타나지 않으면,휘발성기본 가정입니다.
불변다음을 나타냅니다. 함수는 동일한 값이 주어지면 항상 동일한 결과를 반환합니다. 인수 값; 즉, 데이터베이스 조회를 수행하지 않습니다. 또는 그 밖에 직접적으로 존재하지 않는 정보를 사용합니다. 매개변수 목록. 이 옵션이 주어지면 모두 상수 인수를 갖는 함수는 즉시 실행될 수 있습니다. 함수 값으로 대체되었습니다.
안정적이를 나타냅니다. 단일 테이블 스캔 함수는 일관되게 다음을 반환합니다. 동일한 인수 값에 대해 동일한 결과가 발생하지만 결과는 SQL 문 전체에서 변경될 수 있습니다. 이것은 결과가 다음에 따라 달라지는 함수에 대한 적절한 선택 데이터베이스 조회, 매개변수 변수(예: 현재 시간대) 등. 또한 다음 사항에 유의하세요.CURRENT_TIMESTAMP함수 계열 그 값이 내부적으로 변하지 않기 때문에 안정적인 것으로 간주됩니다. 거래.
휘발성다음을 나타냅니다. 단일 테이블 스캔 내에서도 함수 값이 변경될 수 있으며, 그래서 최적화를 할 수 없습니다. 상대적으로 적은 수의 데이터베이스 이런 의미에서 함수는 휘발성입니다. 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday(). 다음과 같은 기능이 있다는 점에 유의하세요. 부작용은 설사 그것이라 할지라도 휘발성으로 분류되어야 합니다. 호출이 실패하는 것을 방지하기 위해 결과는 상당히 예측 가능합니다. 최적화되었습니다. 예는 다음과 같습니다setval().
NULL 입력 시 호출됨( 기본값)은 함수가 호출될 것임을 나타냅니다. 일반적으로 인수 중 일부가 null인 경우입니다. 그때이다 null을 확인하는 함수 작성자의 책임 필요한 경우 가치를 평가하고 적절하게 대응하세요.
NULL 입력 시 NULL 반환또는STRICT함수를 나타냅니다. 인수 중 하나라도 NULL일 때마다 항상 NULL을 반환합니다. 이 매개변수를 지정하면 함수가 작동하지 않습니다. NULL 인수가 있을 때 실행됩니다. 대신 NULL 결과는 자동으로 가정됩니다.
보안 호출자다음을 나타냅니다. 이 기능은 다음의 권한으로 실행됩니다. 그것을 호출하는 사용자. 그게 기본값이에요.보안 정의자함수를 지정합니다. 해당 사용자의 권한으로 실행됩니다. 만들어냈습니다.
핵심 단어외부이다 SQL 호환성을 위해 제공되지만 선택 사항입니다. SQL에서 이 기능은 외부에만 적용되는 것이 아닙니다. 기능.
함수를 정의하는 문자열; 의미는 다음에 달려있다 언어. 내부 함수 이름, 경로일 수 있습니다. 객체 파일, SQL 쿼리 또는 절차의 텍스트 언어.
이 형식은AS절은 동적으로 연결된 C 언어 함수에 사용됩니다. C 언어 소스 코드의 함수 이름이 동일하지 않습니다. SQL 함수의 이름으로. 문자열obj_file파일 이름입니다 동적으로 로드 가능한 객체를 포함하고, 그리고link_symbol객체의 링크입니다. 기호, 즉 C 언어의 함수 이름 소스 코드.
선택적인 부분을 지정하는 역사적 방법 기능에 대한 정보입니다. 다음 속성 여기에 나타날 수 있습니다:
다음과 동일함STRICT또는NULL에 대해 NULL을 반환합니다. 입력
isCachable구식입니다 에 해당함불변; 이전 버전과의 호환성을 위해 여전히 허용됩니다. 이유.
속성 이름은 대소문자를 구분하지 않습니다.
다음 장을 참조하세요.PostgreSQL 프로그래머 가이드확장 주제에 대해PostgreSQL추가 기능을 통해 외부 함수 작성에 대한 정보입니다.
전체SQL유형 구문은 다음과 같습니다. 입력 인수 및 반환 값에 허용됩니다. 그러나 일부 유형 사양의 세부정보(예: 정밀도 필드)숫자유형)의 책임은 다음과 같습니다. 기본 함수 구현을 자동으로 삼켜집니다. (즉, 인식되거나 시행되지 않음)함수 생성명령.
PostgreSQL토토 핫 허용오버로딩; 즉, 같은 이름이 될 수 있습니다. 여러 다른 기능을 가지고 있는 한 사용할 수 있습니다. 인수 유형이 다릅니다. 이 시설은 주의해서 사용해야 합니다 그러나 내부 및 C 언어 기능의 경우.
두내부함수는 가질 수 없습니다 링크 시 오류를 일으키지 않고 동일한 C 이름을 사용합니다. 얻으려면 그 주위에 다른 C 이름을 지정하십시오(예를 들어 C 이름의 일부로 인수 유형) 그런 다음 해당 이름을 지정하십시오. AS 절에서함수 생성. 만약에 AS 절이 비어 있는 경우만들기 토토 핫함수의 C 이름이 다음과 같다고 가정합니다. SQL 이름입니다.
마찬가지로, 여러 개의 SQL 함수 이름을 오버로드할 때 C 언어 함수는 각 C 언어 인스턴스에 고유한 이름을 사용한 다음 대체 형식을 사용합니다.AS절함수 생성적절한 선택을 위한 구문 오버로드된 각 SQL 함수의 C 언어 구현입니다.
반복되는 경우함수 생성호출 동일한 객체 파일을 참조하면 파일은 한 번만 로드됩니다. 받는 사람 파일을 언로드하고 다시 로드하고(아마도 개발 중에), 다음을 사용하세요.로드명령.
사용드롭 토토 핫제거하다 사용자 정의 함수.
기존 함수의 정의를 업데이트하려면 다음을 사용하세요.함수 생성 또는 교체. 참고하세요 이름이나 인수 유형을 변경할 수 없습니다. 이 방식으로 작동합니다. (시도했다면 새로운 고유한 기능). 또한,생성 또는 교체 기능귀하의 반환 유형을 변경할 수 없습니다. 기존 기능. 그렇게 하려면 다음을 삭제하고 다시 생성해야 합니다. 기능.
함수를 삭제한 후 다시 생성하면 새 함수는 예전과 같은 실체가 아닙니다. 기존 규칙을 깨뜨리게 됩니다. 이전 함수를 참조한 뷰, 트리거 등. 사용함수 생성 또는 교체변경하려면 참조하는 객체를 중단하지 않고 함수 정의 기능.
기능을 정의하려면 사용자는 다음을 가지고 있어야 합니다.사용언어에 대한 특권입니다.
기본적으로 함수의 소유자(작성자)만이 권한을 갖습니다. 그것을 실행할 권리가 있습니다. 다른 사용자에게는 다음 권한이 부여되어야 합니다.실행할 수 있는 기능에 대한 권한 사용하세요.
간단한 SQL 함수를 생성하려면:
CREATE FUNCTION one() 정수를 반환합니다.
AS '결과로 1 선택;'
언어 SQL;
답변으로 one()을 선택하세요.답변
--------
1
다음 예에서는 루틴을 호출하여 C 함수를 생성합니다. 사용자가 만든 공유 라이브러리에서funcs.so(확장자는 지역에 따라 다를 수 있습니다. 플랫폼). 공유 라이브러리 파일은 서버의 동적 라이브러리 검색 경로. 이 특정 루틴은 숫자를 확인하고 함수의 숫자가 확인되면 true를 반환합니다. 매개변수가 정확합니다. CHECK에 사용하기 위한 것입니다. 제약.
CREATE FUNCTION ean_checkdigit(char, char) RETURNS 부울
AS '펑크' LANGUAGE C;
CREATE TABLE 제품(
ID 문자(8) 기본 키,
eanprefix char(8) CHECK (eanprefix ~ '[0-9]2-[0-9]5')
참고사항 브랜드명(ean_prefix),
eancode char(6) CHECK (eancode ~ '[0-9]6'),
CONSTRAINT ean CHECK (ean_checkdigit(eanprefix, eancode))
);
다음 예는 유형 변환을 수행하는 함수를 생성합니다 사용자 정의 유형 콤플렉스에서 내장 유형 포인트까지. 이 함수는 동적으로 로드된 객체에 의해 구현됩니다. C 소스에서 컴파일되었습니다(현재는 더 이상 사용되지 않는 공유 파일에 절대 파일 이름을 지정하는 대신 개체 파일). 에 대한포스트그레SQL에 자동으로 유형 변환 함수 찾기, SQL 함수 반환 유형과 이름이 동일해야 하므로 오버로드가 발생합니다. 불가피하다. 함수 이름은 다음을 사용하여 오버로드됩니다. 의 두 번째 형태ASSQL의 절 정의:
CREATE FUNCTION 포인트(복합) RETURNS 포인트
AS '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'
언어 C 엄격;
함수의 C 선언은 다음과 같습니다:
포인트 * complex_to_point (복합 *z)
포인트 *p;
p = (점 *) palloc(sizeof(점));
p-x = z-x;
p-y = z-y;
p를 반환;
기능이 표시되어 있음을 참고하세요"엄격"; 이를 통해 NULL 검사를 건너뛸 수 있습니다. 함수 본문에 입력합니다.
왜냐면 a보안 정의자함수
그것을 생성한 사용자의 권한으로 실행되므로 주의
기능이 오용되지 않도록 보장하는 것이 필요합니다. 에 대한
보안,검색_경로설정되어야 합니다
신뢰할 수 없는 사용자가 쓸 수 있는 스키마를 제외합니다. 이는 방지합니다
악의적인 사용자가 사용하는 개체를 가리는 개체를 생성하지 못하도록 방지
기능. 이와 관련하여 특히 중요한 것은
기본적으로 가장 먼저 검색되는 임시 테이블 스키마
일반적으로 누구나 쓸 수 있습니다. 안전한 배치가 가능합니다
임시 스키마를 마지막에 검색하도록 강제합니다. 이렇게 하려면
쓰다pg_temp의 마지막 항목으로검색_경로. 이 기능
안전한 사용법을 보여줍니다:
기능 생성 check_password(TEXT, TEXT)
부울을 '로 반환합니다.
DECLARE가 BOOLEAN을 통과했습니다.
old_path 텍스트;
시작
-- 이전 search_path를 저장합니다. current_setting을 충족해야 합니다.
-- 올바른 함수를 호출하는지 확인하기 위해
old_path := pg_catalog.current_setting(''검색_경로'');
-- 보안 검색_경로(신뢰할 수 있는 스키마, 'pg_temp'')를 설정합니다.
-- 이전 값이 복원되도록 is_local = true로 설정합니다.
-- 기능이 끝나기 전에 오류가 발생한 경우.
PERFORM pg_catalog.set_config(''search_path'', ''admin, pg_temp'', true);
-- 우리가 하려고 온 안전한 일이라면 뭐든지 하세요.
SELECT (pwd = $2) INTO가 전달되었습니다.
비밀번호에서
사용자 이름 = $1;
-- 호출자의 search_path를 복원합니다.
실행 pg_catalog.set_config(''search_path'', old_path, true);
반환이 통과되었습니다.
끝;
' LANGUAGE plpgsql 보안 정의자;
A 함수 생성명령이 정의되었습니다 SQL99에서.포스트그레SQL버전 비슷하지만 완전히 호환되지는 않습니다. 속성은 다음과 같습니다. 이식 가능하며 사용 가능한 언어도 다릅니다.
메이저 토토 사이트 : 문서 : 7.3 : Drop Function, PostgreSQL : 문서 : 7.3 : 젠 토토, PostgreSQL : 문서 : 7.3 :사설 토토 사이트, 취소, createlang, PostgreSQL 프로그래머 가이드