함수 만들기 - 새 함수 정의
[또는 교체] 함수 만들기이름
([[argmode
] [argname
]Argtype
[기본값default_expr
] [, ...]])) [반환rettype
column_name
column_type
[, ...])]lang_name
type_name
[, ...]execution_cost
result_rows
support_function
configuration_parameter
tovalue
| =value
정의
'OBJ_FILE
','link_symbol
' ...
함수 만들기
새 기능을 정의합니다.함수 생성 또는 교체
새 함수를 생성하거나 기존 정의를 대체합니다. 함수를 정의하려면 사용자에게가 있어야합니다.usage
언어에 대한 특권.
스키마 이름이 포함되면 지정된 스키마에서 함수가 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.과부하).
기존 함수의 현재 정의를 대체하려면 사용함수 생성 또는 교체
. 이런 방식으로 함수의 이름이나 인수 유형을 변경할 수 없습니다 (시도한 경우 실제로 새롭고 별개의 기능을 만들 것입니다).함수 생성 또는 교체
기존 함수의 리턴 유형을 변경하지 못하게합니다. 그렇게하려면 사설 토토 사이트을 떨어 뜨리고 재현해야합니다.out
매개 변수, 즉 모든 유형을 변경할 수 없음을 의미합니다out
함수를 삭제하는 것을 제외한 매개 변수.)
언제함수 생성 또는 교체
기존 함수를 대체하는 데 사용되며 함수의 소유권과 권한은 변경되지 않습니다. 다른 모든 함수 속성에는 명령에 지정된 값이 지정되어 있습니다.
함수를 삭제 한 다음 재현하면 새 기능은 이전과 동일한 엔티티가 아닙니다. 이전 기능을 지칭하는 기존 규칙,보기, 트리거 등을 삭제해야합니다.함수 생성 또는 교체
함수를 참조하는 객체를 깨지 않고 함수 정의를 변경하려면. 또한,Alter Function
기존 사설 토토 사이트의 보조 속성의 대부분을 변경하는 데 사용할 수 있습니다.
함수를 생성하는 사용자는 함수의 소유자가됩니다.
함수를 만들 수 있으려면usage
인수 유형 및 반환 유형에 대한 특권.
참조섹션 37.3작문 사설 토토 사이트에 대한 자세한 내용은
이름
생성 할 함수의 이름 (선택적으로 스키마 자격).
argmode
인수의 모드 :in
, out
, inout
또는variadic
. 생략하면 기본값은입니다.in
. 오직out
인수는 A를 따를 수 있습니다variadic
하나. 또한,out
andinout
인수는와 함께 사용할 수 없습니다.반환 테이블
표기법.
argname
인수의 이름. 일부 언어 (SQL 및 PL/PGSQL 포함)를 사용하면 기능 본문에서 이름을 사용할 수 있습니다.섹션 4.3). 어쨌든 출력 인수의 이름은 결과 행 유형의 열 이름을 정의하기 때문에 중요합니다.
Argtype
함수 인수의 데이터 유형 (선택적으로 스키마 자격이있는 경우). 인수 유형은 기본, 복합 또는 도메인 유형 일 수 있거나 테이블 열의 유형을 참조 할 수 있습니다.
구현 언어에 따라 지정할 수도 있습니다“Pseudo-types”와 같은cstring
. 의사 유형은 실제 인수 유형이 불완전하게 지정되거나 일반 SQL 데이터 유형 세트 외부에 있음을 나타냅니다.
열의 유형은 서면으로 참조됩니다
. 이 기능을 사용하면 때때로 테이블의 정의 변경과 독립적으로 기능을 만드는 데 도움이 될 수 있습니다.table_name
.column_name
%유형
default_expr
매개 변수가 지정되지 않은 경우 기본값으로 사용할 표현식. 표현은 매개 변수의 인수 유형에 강요되어야합니다.inout
) 매개 변수는 기본값을 가질 수 있습니다. 기본값이있는 매개 변수를 따르는 모든 입력 매개 변수도 기본값이 있어야합니다.
rettype
반환 데이터 유형 (선택적으로 스키마 자격). 리턴 유형은 기본, 복합재 또는 도메인 유형 일 수 있거나 테이블 열의 유형을 참조 할 수 있습니다.“Pseudo-types”와 같은cstring
. 함수가 값을 반환하지 않아야하는 경우 지정void
반환 유형으로.
있을 때out
또는inout
매개 변수,반환
절을 생략 할 수 있습니다. 존재하는 경우 출력 매개 변수가 암시하는 결과 유형에 동의해야합니다.레코드
여러 출력 매개 변수가 있거나 단일 출력 매개 변수와 동일한 유형이있는 경우
thesetof
수정자는 함수가 단일 항목이 아닌 항목 세트를 반환 할 것을 나타냅니다.
열의 유형은 서면으로 참조됩니다
.table_name
.column_name
%유형
column_name
반환 테이블
구문. 이것은 사실상 이름을 선언하는 또 다른 방법입니다out
매개 변수를 제외하고반환 테이블
또한 암시setof 반환
.
column_type
의 출력 열의 데이터 유형반환 테이블
구문.
lang_name
함수가 구현되는 언어의 이름.SQL
, c
, 내부
또는 사용자 정의 절차 언어의 이름 (예 :PLPGSQL
. 단일 따옴표로 이름을 동봉하는 것은 더 이상 사용되지 않으며 일치하는 경우가 필요합니다.
변환 for typetype_name
[, ...]
호출을 함수로 변환하는 목록은 적용되어야합니다. 변환 SQL 유형과 언어 별 데이터 유형으로 변환;변환 생성. 절차 적 언어 구현에는 일반적으로 내장 유형에 대한 하드 코드 지식이 있으므로 여기에 나열 될 필요가 없습니다.
창
창
함수가 a임을 나타냅니다.창 함수평범한 기능이 아닌. 이것은 현재 C에서 작성된 기능에만 유용합니다.창
기존 함수 정의를 교체 할 때 속성을 변경할 수 없습니다.
불변
안정적인
휘발성
이러한 속성은 쿼리 최적화에 함수의 동작에 대해 알려줍니다. 최대 하나의 선택을 지정할 수 있습니다.휘발성
기본 가정입니다.
불변
함수는 데이터베이스를 수정할 수 없으며 동일한 인수 값이 주어지면 항상 동일한 결과를 반환합니다. 즉, 데이터베이스 조회를 수행하지 않거나 인수 목록에 직접 표시되지 않은 정보를 사용하지 않습니다.
안정적인
함수가 데이터베이스를 수정할 수 없으며 단일 테이블 스캔 내에서 동일한 인수 값에 대해 동일한 결과를 지속적으로 반환하지만 결과는 SQL 문에서 변경 될 수 있음을 나타냅니다. 데이터베이스 조회, 매개 변수 (현재 시간대 등) 등의 결과에 의존하는 함수에 대한 적절한 선택입니다.이후
현재 명령에 의해 수정 된 행을 쿼리하려는 트리거.) 또한에 주목하십시오.current_timestamp
함수 가족은 거래 내에서 가치가 변경되지 않기 때문에 안정적인 자격이 있습니다.
휘발성
는 단일 테이블 스캔 내에서도 함수 값이 변경 될 수 있으므로 최적화를 수행 할 수 없음을 나타냅니다. 이러한 의미에서는 비교적 적은 데이터베이스 기능이 휘발성입니다.random ()
, currval ()
, TimeOfday ()
. 그러나 부작용이있는 함수는 호출이 최적화되는 것을 방지하기 위해 결과가 상당히 예측 가능하더라도 휘발성을 분류해야합니다.setVal ()
.
자세한 내용은 참조하십시오.섹션 37.7.
LeakProof
LeakProof
함수에 부작용이 없음을 나타냅니다. 그것은 반환 값 이외의 주장에 대한 정보를 공개하지 않습니다.Security_Barrier
행 수준 보안이 활성화 된 옵션 또는 테이블. 이 시스템은 부주의 한 데이터 노출을 방지하기 위해 쿼리 자체에서 사용자가 공급 한 조건에서 보안 정책 및 보안 장벽보기로부터 조건을 시행합니다.보기 만들기and섹션 40.5. 이 옵션은 SuperUser에서만 설정할 수 있습니다.
NULL 입력 호출
null 입력에서 null을 반환
엄격한
NULL 입력 호출
(기본값)는 일부 인수가 무일하게있을 때 함수가 정상적으로 호출 될 것임을 나타냅니다. 그런 다음 필요한 경우 NULL 값을 확인하고 적절하게 응답하는 것은 기능 저자의 책임입니다.
null 입력에서 null을 반환
또는엄격한
인수가 무일하게 될 때마다 함수가 항상 널을 반환 함을 나타냅니다. 이 매개 변수가 지정되면 널 인수가있을 때 함수가 실행되지 않습니다.
[외부] Security Invoker
[외부] Security Definer
Security Invoker
이 사설 토토 사이트을 사용자의 권한으로 실행해야 함을 나타냅니다. 그것은 기본입니다.Security Definer
그 사설 토토 사이트을 소유 한 사용자의 권한으로 실행해야한다고 지정합니다.
키워드외부
SQL 적합성을 허용하지만 SQL과 달리 모든 기능에 적용되는 SQL과 달리 선택 사항입니다..
병렬
병렬 불안한
병렬 제한
함수가 병렬 모드에서 실행될 수 있지만 실행은 병렬 그룹 리더로 제한됩니다..병렬 금고
함수가 제한없이 병렬 모드에서 실행되기에 안전하다는 것을 나타냅니다.
함수는 데이터베이스 상태를 수정하거나 하위 트랜잭션 사용과 같은 트랜잭션을 변경하거나 시퀀스에 액세스하거나 설정에 지속적으로 변경하려는 경우 (예 : (예 :)를 변경하는 경우 평행 불안정으로 표시해야합니다.setVal
). 임시 테이블, 클라이언트 연결 상태, 커서, 준비된 명령문 또는 시스템이 병렬 모드에서 동기화 할 수없는 기타 백엔드 로컬 상태에 액세스하는 경우 병렬 제한으로 표시되어야합니다 (예 :.setseed
다른 프로세스에 의한 변경은 리더에 반영되지 않기 때문에 그룹 리더가 아닌 다른 사람이 실행할 수 없습니다). 일반적으로 함수가 제한되거나 안전하지 않을 때 안전하다고 표시되거나 실제로 안전하지 않을 때 제한되는 것으로 표시되면 평행 쿼리에서 사용될 때 오류를 던지거나 잘못된 답변을 생성 할 수 있습니다.안전하지 않은
, 기본값입니다.
비용
execution_cost
함수에 대한 예상 실행 비용을 제공하는 양수cpu_operator_cost. 함수가 세트를 반환하면 반환 된 행당 비용입니다.
행
result_rows
플래너가 함수가 반환 될 것으로 예상하는 추정 행의 행을 제공하는 양수. 함수가 세트를 반환하도록 선언 된 경우에만 허용됩니다.
지원
support_function
a의 이름 (선택적으로 스키마 자격)플래너 지원 기능이 사설 토토 사이트에 사용합니다. 보다섹션 37.11자세한 내용. 이 옵션을 사용하려면 수퍼 유저가되어야합니다.
configuration_parameter
value
theset
절 항목은 함수를 입력 할 때 지정된 구성 매개 변수를 지정된 값으로 설정 한 다음 함수가 종료 될 때 이전 값으로 복원됩니다..현재에서 설정
현재의 매개 변수 값을 저장합니다.함수 만들기
함수가 입력 될 때 적용 할 값으로 실행됩니다.
if aset
조항은 함수에 첨부 된 다음 A의 효과로컬 설정
동일한 변수에 대한 함수 내부 실행 된 명령은 함수로 제한됩니다. 구성 매개 변수의 이전 값은 여전히 함수 종료에서 복원됩니다. 그러나 평범한set
명령 (Local
)은를 무시합니다.set
조항, 이전과 마찬가지로로컬 설정
명령 : 현재 트랜잭션이 롤백되지 않는 한 기능 종료 후에 그러한 명령의 효과가 지속됩니다.
정의
함수를 정의하는 문자열 상수; 의미는 언어에 따라 다릅니다.
달러 인용문을 사용하는 것이 종종 도움이됩니다 (참조섹션 4.1.2.4) 일반 단일 인용문이 아닌 함수 정의 문자열을 작성합니다. 달러 인용이 없으면 함수 정의의 단일 따옴표 또는 백 슬래시를 두 배로 늘림으로써 탈출해야합니다.
OBJ_FILE
, link_symbol
이 형태의as
절은 C 언어 소스 코드의 함수 이름이 SQL 함수의 이름과 같지 않을 때 동적으로로드 가능한 C 언어 함수에 사용됩니다. 문자열OBJ_FILE
컴파일 된 C 함수를 포함하는 공유 라이브러리 파일의 이름이며로 해석됩니다.로드명령. 문자열link_symbol
는 함수의 링크 기호, 즉 C 언어 소스 코드의 함수 이름입니다. 링크 기호가 생략되면 정의되는 SQL 함수의 이름과 동일하다고 가정합니다.
반복 될 때함수 만들기
통화는 동일한 개체 파일을 참조하고 파일은 세션 당 한 번만로드됩니다. 파일을 언로드하고 다시로드하려면 (아마도 개발 중) 새 세션을 시작하십시오.
postgresql함수 허용과부하; 즉, 동일한 이름은 뚜렷한 입력 인수 유형을 갖는 한 여러 다른 기능에 사용할 수 있습니다.섹션 10.3.
동일한 이름을 가진 경우 두 기능이 동일하게 간주됩니다입력인수 유형, 무시out
매개 변수. 따라서 예를 들어 이러한 선언 충돌은 다음과 같습니다.
기능 생성 foo (int) ...food foo (int, out text) ...
다른 인수 유형 목록이있는 사설 토토 사이트은 생성 시간에 충돌로 간주되지 않지만 기본값이 제공되면 사용중인 충돌 일 수 있습니다. 예를 들어, 고려
함수 만들기 foo (int) ...기능을 만들기 foo (int, int default 42) ...
A Callfoo (10)
어떤 함수를 호출 해야하는지에 대한 모호성으로 인해 실패합니다.
전체SQL형식 구문은 함수의 인수 및 반환 값을 선언하는 데 허용됩니다. 그러나 괄호로 된 유형 수정 자 (예 : 유형의 정밀 필드숫자
)함수 만들기
. 예를 들어사설 토토 사이트 생성 foo (varchar (10)) ...
정확히사설 토토 사이트 생성 foo (varchar) ...
.
기존 함수를함수 생성 또는 교체
, 매개 변수 이름 변경에 제한이 있습니다. 입력 매개 변수에 이미 할당 된 이름을 변경할 수는 없습니다 (이전에는 없었던 매개 변수에 이름을 추가 할 수 있지만).
함수가 선언 된 경우엄격한
withvariadic
인수, 엄격함 검사는 변수 배열을 테스트합니다전체적으로는 null입니다. 배열에 null 요소가있는 경우 사설 토토 사이트이 여전히 호출됩니다.
SQL 기능을 사용하여 두 개의 정수 추가 :
함수 추가 (정수, 정수) 정수를 반환합니다 '$ 1 + $ 2를 선택하십시오';
인수 이름을 사용하여 정수를 증가시킵니다.pl/pgsql:
함수 증분 생성 또는 교체 (I Integer) 정수를 $$로 반환합니다. 시작하다
여러 출력 매개 변수가 포함 된 레코드를 반환합니다 :
함수 DUP 작성 (Int, Out F1 int, Out F2 텍스트) $$로 $ 1, 캐스트 (텍스트 $ 1)
당신은 명시 적으로 명명 된 복합 유형으로 동일한 일을 더 할 수 있습니다 :
type dup_result를 생성 (f1 int, f2 text);기능 dup (int)를 작성합니다. dup_result를 반환합니다
여러 열을 반환하는 또 다른 방법은 A를 사용하는 것입니다.테이블
사설 토토 사이트 :
함수 생성 DUP (int) 리턴 테이블 (F1 int, F2 텍스트) $$로 $ 1, 캐스트 (텍스트 $ 1)
그러나 a테이블
함수는 실제로 a를 반환하기 때문에 이전 예제와 다릅니다.set한 레코드가 아니라 레코드의
Security Definer
안전하게 사설 토토 사이트aSecurity Definer
함수는 그것을 소유 한 사용자의 권한으로 실행됩니다. 사설 토토 사이트을 오용 할 수 없도록 관리가 필요합니다. 보안을 위해search_path신뢰할 수없는 사용자가 쓸 수있는 스키마를 제외하도록 설정해야합니다. 이로 인해 악성 사용자가 기능이 사용하려는 객체를 마스크하는 객체 (예 : 테이블, 기능 및 연산자)를 만들지 못하게합니다.PG_TEMP
마지막 항목으로search_path
. 이 사설 토토 사이트은 안전한 사용법을 보여줍니다.
함수 생성 check_password (텍스트의 이름, 텍스트 패스)부울을 $$로 반환합니다
이 기능의 의도는 테이블에 액세스하는 것입니다관리자
. 하지만없이set
조항 또는 Aset
언급 된 조항관리자
, 임시 테이블이라는 임시 테이블을 만들어 함수를 전복 할 수 있습니다pwds
.
전postgresql버전 8.3,set
조항을 사용할 수 없었으므로 오래된 사설 토토 사이트에는 저장, 설정 및 복원을위한 복잡한 논리가 포함될 수 있습니다search_path
. 그만큼set
이 목적으로 사용하기가 훨씬 쉽습니다.
명심해야 할 또 다른 요점은 기본적으로 실행 권한이 부여된다는 것입니다.public
새로 생성 된 기능 (참조섹션 5.7자세한 내용은). 종종 보안 정의 기능의 사용을 일부 사용자에게만 제한하고자합니다.public
권한과 그랜트 execute 권한을 선택적으로 부여하십시오. 새로운 사설 토토 사이트이 모두에게 액세스 할 수있는 창이 피하려면이를 작성하고 단일 트랜잭션 내에서 권한을 설정하십시오.
시작;함수 check_password (텍스트 un, pass 텍스트) ... 보안 정의기를 만듭니다.
A 함수 만들기
명령은 SQL 표준에 정의되어 있습니다. 그만큼postgresql버전은 유사하지만 완전히 호환되지는 않습니다. 속성은 휴대용이 아니며 사용 가능한 언어도 다릅니다.
다른 데이터베이스 시스템과의 호환성argmode
전후에 작성할 수 있습니다argname
. 그러나 첫 번째 방법 만 표준 준수입니다.
매개 변수 기본값의 경우 SQL 표준은 구문 만 지정합니다.기본값
키워드. 의 구문=
T-SQL 및 Firebird에서 사용됩니다.
문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다.이 양식문서 문제를보고하려면