프로시저 생성

CREATE PROCEDURE — 새 프로시저 정의

시놉시스

생성 [ 또는 교체] 토토 핫이름 ( [ [ argmode ] [ argname ] argtype[  기본 | =default_expr] [, ...] ] )
   언어lang_name| 유형에 대한 변환유형_이름[, ... ]
    | [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자
    | 설정구성_매개변수받는 사람 | = | 현재부터 
    | 그대로 '정의'
    | 그대로 'obj_file', 'link_symbol'
    | sql_body
  } ...

설명

프로시저 생성새 절차를 정의합니다.프로시저 생성 또는 교체새 프로시저를 생성하거나 기존 정의를 대체합니다. 프로시저를 정의하려면 사용자에게 다음이 있어야 합니다.사용법언어에 대한 특권.

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

기존 절차의 현재 정의를 바꾸려면 다음을 사용하십시오.프로시저 생성 또는 교체. 이 방법으로 프로시저의 이름이나 인수 유형을 변경할 수는 없습니다(시도한다면 실제로는 새로운 고유 프로시저를 생성하게 됩니다).

언제프로시저 생성 또는 교체은 기존 프로시저를 대체하는 데 사용되며 프로시저의 소유권과 권한은 변경되지 않습니다. 다른 모든 프로시저 속성에는 명령에 지정되거나 암시된 값이 할당됩니다. 이를 대체하려면 프로시저를 소유해야 합니다(여기에는 소유 역할의 멤버가 되는 것도 포함됩니다).

프로시저를 생성한 사용자가 프로시저의 소유자가 됩니다.

프로시저를 생성하려면 다음이 있어야 합니다.사용인수 유형에 대한 권한.

참조PostgreSQL : 문서 : 17 : 36.4. 사용자 정의 메이저 토토 사이트작성 절차에 대한 추가 정보를 확인하세요.

매개변수

이름

생성할 프로시저의 이름(선택적으로 스키마 한정).

argmode

인수 모드:IN, 밖으로, INOUT, 또는VARIADIC. 생략하면 기본값은IN.

인수이름

인수의 이름.

argtype

프로시저 인수(선택적으로 스키마 한정)의 데이터 유형(있는 경우). 인수 유형은 기본, 복합 또는 도메인 유형이거나 테이블 열 유형을 참조할 수 있습니다.

구현 언어에 따라 지정이 허용될 수도 있습니다의사 유형예를 들어cstring. 의사 유형은 실제 인수 유형이 불완전하게 지정되었거나 일반 SQL 데이터 유형 집합을 벗어났음을 나타냅니다.

열의 유형은 쓰기로 참조됩니다.테이블_이름.컬럼_이름%TYPE. 이 기능을 사용하면 테이블 정의 변경과 관계없이 프로시저를 독립적으로 만드는 데 도움이 되는 경우가 있습니다.

default_expr

매개변수가 지정되지 않은 경우 기본값으로 사용되는 표현식입니다. 표현식은 매개변수의 인수 유형으로 강제 변환 가능해야 합니다. 기본값이 있는 매개변수 뒤에 오는 모든 입력 매개변수에도 기본값이 있어야 합니다.

lang_name

프로시저가 구현되는 언어의 이름. 다음과 같을 수 있습니다.sql, c, 내부또는 사용자 정의 절차 언어의 이름(예:plpgsql. 기본값은sqlifsql_body지정되었습니다. 이름을 작은따옴표로 묶는 것은 더 이상 사용되지 않으며 대소문자가 일치해야 합니다.

변환 유형에 대해유형_이름 } [, ... ] }

프로시저에 대한 호출을 변환하는 목록이 적용되어야 합니다. SQL 유형과 언어별 데이터 유형 간 변환을 변환합니다. 참조변환 생성. 토토 핫적 언어 구현에는 일반적으로 내장 유형에 대한 지식이 하드코딩되어 있으므로 여기에 나열할 필요가 없습니다. 토토 핫적 언어 구현이 유형을 처리하는 방법을 모르고 변환이 제공되지 않는 경우 데이터 유형을 변환하기 위한 기본 동작으로 돌아가지만 이는 구현에 따라 다릅니다.

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

보안 호출자프로시저를 호출하는 사용자의 권한으로 프로시저가 실행됨을 나타냅니다. 그게 기본값이에요.보안 정의자프로시저를 소유한 사용자의 권한으로 프로시저가 실행되도록 지정합니다.

핵심 단어외부은 SQL 적합성을 위해 허용되지만 SQL과 달리 이 기능은 외부 프로시저뿐만 아니라 모든 프로시저에 적용되므로 선택 사항입니다.

A 보안 정의자프로시저는 트랜잭션 제어문을 실행할 수 없습니다(예:커밋그리고롤백, 언어에 따라 다름).

configuration_parameter

SET절은 프로시저가 시작될 때 지정된 구성 매개변수가 지정된 값으로 설정되고 프로시저가 종료될 때 이전 값으로 복원되도록 합니다.현재부터 설정다음의 경우 현재 매개변수 값을 저장합니다.프로시저 생성프로시저 진입 시 적용되는 값으로 실행됩니다.

만약에SET절이 프로시저에 첨부되면 a의 효과로컬 설정15939_16135SET명령(없음로컬)는를 재정의합니다.SET절, 이전과 마찬가지로로컬 설정명령: 현재 트랜잭션이 롤백되지 않는 한 이러한 명령의 효과는 프로시저 종료 후에도 지속됩니다.

만약에SET절이 프로시저에 첨부된 경우 해당 프로시저는 트랜잭션 제어 문을 실행할 수 없습니다(예:커밋그리고롤백, 언어에 따라 다름).

참조세트그리고윈 토토 : 문서 : 17 : 19 장 서버 구성허용되는 매개변수 이름 및 값에 대한 자세한 내용을 확인하세요.

정의

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

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

obj_file, link_symbol

이 형식은AS절은 C 언어 소스 코드의 프로시저 이름이 SQL 프로시저의 이름과 동일하지 않을 때 동적으로 로드 가능한 C 언어 프로시저에 사용됩니다. 문자열obj_file는 컴파일된 C 프로시저를 포함하는 공유 라이브러리 파일의 이름이며 다음과 같이 해석됩니다.로드명령. 문자열link_symbol은 프로시저의 링크 기호, 즉 C 언어 소스 코드의 프로시저 이름입니다. 링크 기호가 생략되면 정의 중인 SQL 프로시저의 이름과 동일한 것으로 간주됩니다.

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

sql_body

a의 몸언어 SQL토토 핫. 이것은 블록이어야 합니다.

원자 시작성명;
  성명;
  ...
  성명;
끝

이것은 프로시저 본문의 텍스트를 문자열 상수로 작성하는 것과 유사합니다(참조정의위), 그러나 몇 가지 차이점이 있습니다. 이 양식은 다음에서만 작동합니다.언어 SQL, 문자열 상수 형식은 모든 언어에서 작동합니다. 이 형식은 프로시저 정의 시 구문 분석되고, 문자열 상수 형식은 실행 시 구문 분석됩니다. 따라서 이 형식은 프로시저 정의 시 확인할 수 없는 다형성 인수 유형 및 기타 구성을 지원할 수 없습니다. 이 양식은 프로시저 본문에 사용된 프로시저와 개체 간의 종속성을 추적합니다.삭제 ... 캐스케이드제대로 작동하지만 문자열 리터럴을 사용하는 형식은 매달린 절차를 남길 수 있습니다. 마지막으로 이 형식은 SQL 표준 및 기타 SQL 구현과 더 잘 호환됩니다.

참고

참조함수 생성프로시저에도 적용되는 함수 생성에 대한 자세한 내용을 확인하세요.

사용전화프로시저를 실행합니다.

CREATE PROCEDURE insert_data(a 정수, b 정수)
언어 SQL
AS $$
tbl 값에 삽입(a);
tbl 값에 삽입(b);
$$;

또는

CREATE PROCEDURE insert_data(a 정수, b 정수)
언어 SQL
원자 시작
  tbl 값에 삽입(a);
  tbl 값에 삽입(b);
끝;

다음과 같이 호출하세요:

호출 insert_data(1, 2);

호환성

A 프로시저 생성명령은 SQL 표준에 정의되어 있습니다.포스트그레SQL구현은 호환되는 방식으로 사용될 수 있지만 확장이 많습니다. 자세한 내용은 다음을 참조하세요.함수 생성.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.