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

생성 토토 핫

이름

함수 생성-새 함수 정의

시놉시스

[또는 교체] 함수 만들기이름([Argtype[, ...]])
    보고rettype언어langname| 불변 | 안정 | 휘발성 물질
    | 널 입력 | NULL 입력에서 NULL을 반환합니다 | 엄격한
    | [외부] 보안 개요 | [외부] 보안 정의기
    | 처럼 '정의'
    | 처럼 'OBJ_FILE','link_symbol'
   ...
    [ 와 함께 (속성[, ...])]

설명

함수 만들기새를 정의합니다 기능.함수 생성 또는 교체새 기능을 만들거나 기존을 교체합니다. 정의.

함수를 생성하는 사용자는 토토 핫.

매개 변수

이름

생성 할 함수의 이름. 스키마 이름 인 경우 포함 된 다음 지정된 기능에서 기능이 생성됩니다 개요. 그렇지 않으면 현재 스키마에서 생성됩니다 (the 검색 경로 앞쪽에 하나; 보다current_schema ()). 새로운 이름 함수는 기존 기능과 동일하게 일치하지 않아야합니다. 인수 유형 동일한 스키마에서. 그러나 기능의 기능 다른 인수 유형은 이름을 공유 할 수 있습니다 (이것은이라고합니다.과부하).

Argtype

함수 인수의 데이터 유형이있는 경우. 입력 유형은 기본, 복잡 또는 도메인 유형 일 수 있습니다. 기존 열의 유형과 동일합니다. a의 유형 칼럼은 서면으로 참조됩니다TableName.ColumnName%유형; 이것을 사용하면 때때로 a를 만드는 데 도움이 될 수 있습니다 변경에서 a의 정의로의 기능 테이블. 구현 언어에 따라도 가능합니다 지정할 수 있도록 허용"의사 유형"와 같은cstring. 의사 유형은 실제임을 나타냅니다 인수 유형은 불완전하게 지정되거나 외부입니다 일반 SQL 데이터 유형 세트.

rettype

반환 데이터 유형. 리턴 유형이 지정 될 수 있습니다 기본, 복잡 또는 도메인 유형 또는 유형과 동일하게 기존 열의. 구현에 따라 언어로 지정할 수 있습니다"의사 유형"와 같은cstring. 그만큼setof수정자는 함수가 세트를 반환 할 것을 나타냅니다. 단일 항목이 아닌 항목.

langname

함수가있는 언어의 이름 구현.SQL, C, 내부또는 사용자 정의의 이름 절차 언어. (참조Createlang.) 호환성, 이름은 단일로 동봉 될 수 있습니다 인용 부호.

불변성
​​안정적인
휘발성

이러한 속성은 시스템에 안전한 지 여부를 알려줍니다. 함수의 여러 평가를 단일로 바꾸십시오 런타임 최적화를위한 평가. 최대 하나의 선택 지정해야합니다. 이 중 어느 것도 나타나지 않으면휘발성기본 가정입니다.

불변함수는 항상 동일하게 동일한 결과를 반환합니다. 인수 값; 즉, 데이터베이스 조회를 수행하지 않습니다 또는 그렇지 않으면 정보가 직접 존재하지 않는 정보를 사용하십시오 매개 변수 목록. 이 옵션이 제공되면 모든 호출 모든 논쟁이있는 기능은 즉시있을 수 있습니다 함수 값으로 대체되었습니다.

안정적인a 단일 테이블 스캔 함수는 일관되게 반환합니다 동일한 인수 값에 대해 동일한 결과이지만 결과는 SQL 문에서 변경 될 수 있습니다. 이것은입니다 결과에 의존하는 함수에 대한 적절한 선택 데이터베이스 조회, 매개 변수 (예 : 현재) 시간대) 등current_timestamp기능 가족 내부의 가치가 변하지 않기 때문에 안정적인 자격 거래.

휘발성단일 테이블 스캔에서도 기능 값이 변경 될 수 있습니다. 따라서 최적화를 할 수 없습니다. 비교적 적은 데이터베이스 이런 의미에서 기능은 휘발성입니다. 몇 가지 예는입니다.random (), currval (), TimeOfday (). 어떤 함수가 있는지에 유의하십시오 부작용은 그 경우에도 휘발성으로 분류되어야합니다 결과는 통화를 방지하기 위해 예측 가능합니다 최적화; 예는입니다.setVal ().

NULL 입력 호출
null 입력에서 null을 반환
엄격한

NULL 입력 호출( 기본값)는 함수가 호출 될 것임을 나타냅니다 일반적으로 일부 논쟁이 무인 상태 일 때. 그때입니다 NULL을 확인하는 토토 핫 저자의 책임 필요한 경우 가치와 적절하게 응답합니다.

null 입력에서 null을 반환또는엄격한함수를 나타냅니다 인수가 무효 일 때마다 항상 널을 반환합니다. 이 매개 변수가 지정되면 함수는 그렇지 않습니다 널 주장이있을 때 실행; 대신 널 결과는 자동으로 가정됩니다.

[외부] 보안 invoker
[외부] 보안 정의

Security Invoker를 나타냅니다 토토 핫은 그것을 호출하는 사용자. 그것은 기본입니다.Security Definer함수를 지정합니다 사용자의 권한으로 실행해야합니다. 그것을 만들었습니다.

키워드외부is SQL 호환성을 위해 존재하지만 그 이후로는 선택 사항입니다 SQL 에서이 기능은 외부에만 적용되지 않습니다. 기능.

정의

함수를 정의하는 문자열; 의미는 다음과 같습니다 언어. 내부 기능 이름, 경로 일 수 있습니다 객체 파일, SQL 쿼리 또는 절차의 텍스트에 언어.

OBJ_FILE, link_symbol

이 형태의as절은입니다 동적으로 연결된 C 언어 함수에 사용됩니다 C 언어 소스 코드의 함수 이름은 동일하지 않습니다. SQL 함수의 이름으로. 문자열OBJ_FILE는 파일의 이름입니다 동적으로로드 가능한 객체를 포함하고link_symbol객체의 링크입니다 기호, 즉 C 언어의 함수 이름 소스 코드.

속성

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

isstrict

동등한엄격한또는null에서 null을 반환합니다 입력

iscachable

iscachable는 더 이상 사용되지 않습니다 동등한불변; 역 호환성으로 여전히 허용됩니다 이유.

속성 이름은 대소 문자에 민감하지 않습니다.

노트

의 장을 참조하십시오postgresql 프로그래머 가이드확장 주제PostgreSQL더 많은 기능을 통해 외부 기능 작성에 관한 정보.

전체SQLType Syntax IS 입력 인수 및 반환 값을 허용합니다. 그러나 일부 유형 사양의 세부 사항 (예 : 정밀 필드숫자유형)은의 책임입니다 기본 기능 구현 및 조용히 삼켜집니다 (즉, 인식 또는 시행되지 않음)토토 핫 생성명령.

PostgreSQL허용 토토 핫과부하; 즉, 같은 이름이 할 수 있습니다 그들이 가지고있는 한 여러 가지 기능에 사용됩니다. 뚜렷한 인수 유형. 이 시설은주의해서 사용해야합니다 그러나 내부 및 C- 언어 기능의 경우.

2내부기능은 가질 수 없습니다 링크 시간에 오류가 발생하지 않고 동일한 C 이름입니다. 얻기 위해 그 주위에 다른 C 이름을 제공하십시오 (예 : 사용하십시오. C 이름의 일부로 인수 유형), 해당 이름을 지정합니다. as의 as에서함수 생성. 만약에 As 절은 비어 있지 않으며생성 토토 핫함수의 C 이름이 다음과 동일하다고 가정합니다. SQL 이름.

마찬가지로, 다중으로 SQL 함수 이름을 과부하시킬 때 c- 언어 함수, 각각의 c- 언어 인스턴스를 제공한다 뚜렷한 이름을 기능하고 대체 형태의를 사용하십시오.as절의 조항토토 핫 생성구문을 선택하려면 구문 각 과부하 된 SQL 기능의 C- 언어 구현.

반복시함수 만들기전화 동일한 개체 파일을 참조하면 파일은 한 번만로드됩니다. 에게 파일을 내리고 다시로드하고 (아마도 개발 중에) 사용로드명령.

use드롭 함수제거하려면 사용자 정의 기능.

기존 함수의 정의를 업데이트하려면 사용함수 생성 또는 교체. 그것을 주목하십시오 이름이나 인수 유형을 변경할 수 없습니다. 이런 식으로 기능합니다 (시도한 경우, 새로운 것을 만들 것입니다. 뚜렷한 기능). 또한,생성 또는 교체 기능반환 유형을 변경할 수 없습니다. 기존 토토 핫. 그렇게하려면 떨어 뜨리고 다시 창출해야합니다 토토 핫.

함수를 삭제 한 다음 다시 만들면 새 함수는 다음과 같습니다. 오래된 것과 같은 실체가 아닙니다. 기존 규칙을 위반하고 이전 기능을 지칭하는보기, 트리거 등. 사용함수 생성 또는 교체변경하려면 a 기능 정의는 기능.

23162_23222사용법언어에 대한 특권.

기본적으로 토토 핫의 소유자 (제작자) 만 그것을 실행할 권리. 다른 사용자는 부여되어야합니다.execute할 수있는 함수에 대한 특권 사용하십시오.

간단한 SQL 기능을 만들려면 :

함수 생성 1 ()은 정수를 반환합니다
    '결과로 1을 선택하십시오.'
    언어 SQL;

답변으로 하나를 선택하십시오;답변 
--------
      1

다음 예제는 루틴을 호출하여 C 함수를 만듭니다. 사용자가 제작 한 공유 라이브러리에서funcs.so(확장은마다 다를 수 있습니다 플랫폼). 공유 라이브러리 파일은 서버에서 추구됩니다 동적 라이브러리 검색 경로. 이 특정한 일상적인 a 함수의 체크 숫자가있는 경우 숫자를 확인하고 true를 반환합니다. 매개 변수가 정확합니다. 수표에 사용하기위한 것입니다 강제.

기능 작성 EAN_CHECKDIGIT (char, char)는 부울을 반환합니다
    'funcs'언어 C;

테이블 제품 생성 (
    ID char (8) 기본 키,
    eanprefix char (8) check (eanprefix ~ '[0-9] 2-[0-9] 5')
                      참조 Brandname (ean_prefix),
    eancode char (6) check (eancode ~ '[0-9] 6'),
    제약 ean check (ean_checkdigit (eanprefix, eancode)))
);

다음 예제는 유형 변환을하는 함수를 만듭니다. 사용자 정의 유형 단지에서 내장 유형 지점까지. 이 기능은 동적으로로드 된 객체에 의해 구현됩니다. C 소스에서 컴파일되었습니다 (우리는 현재 모호한 것을 설명합니다 공유에 절대 파일 이름을 지정하는 대안 객체 파일). 을 위한postgresqlto SQL 기능 인 유형 변환 기능을 자동으로 찾으십시오 리턴 유형과 동일한 이름을 가져야하므로 과부하가 발생합니다. 피할 수 없습니다. 함수 이름은 사용하여 과부하입니다 두 번째 형태의asSQL의 조항 정의:

함수 포인트 생성 (복잡한)은 포인트를 반환합니다
    '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'로
    언어 C 엄격한;

함수의 C 선언은 다음과 같습니다.

포인트 * complex_to_point (complex * z)

        지점 *p;

        p = (점 *) palloc (sizeof (point));
        p- x = z- x;
        p- y = z- y;

        반환 p;

함수가 표시되어 있음에 유의하십시오"엄격한"; 이를 통해 NULL 점검을 건너 뛸 수 있습니다 토토 핫 본문의 입력.

쓰기보안 정의기토토 핫 안전하게

a보안 정의함수 그것을 만든 사용자의 권한으로 실행됩니다. 함수를 오용 할 수 없도록하려면 필요합니다. 을 위한 보안,search_path를 설정해야합니다 신뢰할 수없는 사용자가 쓸 수있는 스키마를 제외합니다. 이것은 방지합니다 사용 된 객체를 마스킹하는 객체를 만드는 악의적 인 사용자 기능. 이와 관련하여 특히 중요합니다 기본적으로 먼저 검색되는 임시 테이블 스키마 일반적으로 누구나 쓰기 가능합니다. 안전한 배열을 가질 수 있습니다 임시 스키마를 마지막으로 검색하도록함으로써. 이를 위해 쓰다PG_TEMP마지막 항목으로search_path. 이 기능 안전한 사용법을 보여줍니다 :

함수 생성 check_password (텍스트, 텍스트)
부울을 다시 반환합니다.
통과 된 부울 선언;
        Old_path 텍스트;
시작하다
        - Old Search_Path를 저장; CORRING_SETTING을 인정해야합니다
        - 올바른 기능을 호출하도록합니다
        Old_path : = PG_CATALOG.CURRENT_SETTING ( ''Search_Path '');

        - 안전한 search_path : 신뢰할 수있는 스키마를 설정 한 다음``pg_temp ''.
        - 이전 값이 복원되도록 IS_LOCAL = TRUE를 설정합니다.
        - 기능 종료에 도달하기 전에 오류가 발생한 경우.
        pg_catalog.set_config ( ''search_path '', ''admin, pg_temp '', true);

        - 우리가 온 안전한 일을하십시오.
        전달 된 (PWD = $ 2)를 선택하십시오
        PWD에서
        여기서 사용자 이름 = $ 1;

        - 발신자의 search_path를 복원합니다
        pg_catalog.set_config ( ''search_path '', Old_path, true);

        통과 된 반환;
끝;
'언어 PLPGSQL 보안 정의기;

호환성

a함수 만들기명령이 정의됩니다 SQL99에서. 그만큼PostgreSQL버전 비슷하지만 완전히 호환되지는 않습니다. 속성은 아닙니다 휴대용, 사용 가능한 언어도 마찬가지입니다.