Azure Database for PostgreSQL에서 함수 만들기 및 사용

완료됨

PostgreSQL은 다른 언어를 지원한다는 것을 이미 배웠습니다. 함수는 다음 네 가지 형식으로 분류할 수 있습니다.

  • SQL로 작성된 함수입니다.
  • PL.pgSQL과 같은 지원되는 절차 언어로 작성된 절차 언어 함수입니다.
  • 내부 함수
  • C 언어 함수입니다.

또한 함수의 용도는 휘발성, 변경할 수 없거나안정적으로 분류될 수도 있습니다.

volatile(기본값) 함수는 데이터베이스를 수정할 수 있으며 매번 동일한 입력 매개 변수를 사용하여 동일한 결과를 반환하지 않을 수도 있습니다. 따라서 이 함수가 호출될 때마다 다시 평가해야 합니다.

안정적인 함수는 데이터베이스를 수정할 수 없으며 동일한 인수를 전달하고 동일한 문 내에서 실행하는 경우 동일한 결과를 반환합니다. 이 함수를 여러 번 호출하면 쿼리 최적화 프로그램에서 마지막으로 호출된 결과를 사용할 수 있습니다.

변경할 수 없는 함수는 데이터베이스를 수정할 수 없으며 호출하는 쿼리에 관계없이 동일한 인수를 전달한 경우 동일한 결과를 반환합니다.

함수의 변동성은 쿼리 최적화 프로그램에서 처리하는 효율성에 큰 차이를 만듭니다.

함수 만들기

함수는 단일 값을 반환하며 SELECT 문 내에서 사용할 수 있습니다.

함수를 만드는 구문은 다음과 같습니다.

CREATE [OR REPLACE] FUNCTION
myfunction ([inputparam] type {default})
RETURNS returntype AS
$$
SQL body
$$
LANGUAGE 'language_name';
CREATE FUNCTION

저장 프로시저와 마찬가지로 $$ 기호는 문자열을 시작하고 종료하는 데 사용됩니다.

함수는 다음 매개 변수를 사용합니다.

  • name - 필요에 따라 스키마 이름을 포함합니다.
  • argmode - 인수의 모드입니다. IN, OUT, INOUT 또는 VARIADIC일 수 있습니다. 기본값은 IN입니다. VARDIAC은 동일한 형식의 정의되지 않은 입력 인수 수 이며 그 뒤에 OUT 인수가 옵니다. OUT 및 INOUT 인수는 RETURNS TABLE 표기법과 함께 사용할 수 없습니다.
  • argname - 인수 이름입니다.
  • argtype - 인수 데이터 형식입니다. 기본, 복합 또는 도메인 형식이거나 테이블 열 형식을 참조할 수 있습니다. 열 형식은 table_name.column_name%TYPE으로 작성됩니다. 이 데이터 형식은 테이블 정의 변경과 독립적으로 함수를 만드는 데 도움이 될 수 있습니다.
  • t_expr - 매개 변수가 지정되지 않은 경우 동일한 형식의 기본값입니다. IN 및 INOUT 매개 변수만 기본값을 갖습니다. 기본값이 있는 매개 변수 다음의 입력 매개 변수에도 기본값이 있어야 합니다.
  • rettype - 기본, 복합 또는 도메인 형식이거나 테이블 열 형식을 참조할 수 있는 반환 데이터 형식입니다. 함수가 값을 반환하지 않는 경우 반환 형식을 void로 지정합니다. OUT 또는 INOUT 매개 변수가 있는 경우 RETURNS 절을 생략할 수 있습니다. 있는 경우 출력 매개변수에 의해 암시된 결과 유형과 일치해야 합니다: 출력 매개변수가 여러 개일 경우 RECORD, 또는 단일 출력 매개변수와 동일한 유형이어야 합니다. SETOF 한정자는 함수가 단일 항목이 아닌 항목 집합을 반환한다는 것을 나타냅니다. 열의 형식은 table_name 작성하여 참조됩니다.
  • column_name - RETURNS TABLE 구문의 출력 열 이름입니다. 이 매개 변수는 RETURNS TABLE이 RETURNS SETOF를 의미한다는 점을 제외하고 명명된 OUT 매개 변수를 선언합니다.
  • column_type - RETURNS TABLE 구문에 있는 출력 열의 데이터 형식입니다.
  • lang_name - 프로시저를 작성하는 데 사용되는 언어입니다. sql_body 지정된 경우 기본값은 sql입니다. sql, c, internal 또는 사용자 정의 절차적 언어의 이름(예: plpgsql)일 수 있습니다.

IMMUTABLE, STABLE 또는 VOLATILE 키워드를 함수에 대한 쿼리 최적화 프로그램의 힌트로 사용합니다. VOLATILE가 기본값입니다.

함수 호출

관련 매개 변수를 전달하여 쿼리에서 함수를 사용할 수 있습니다. 다음은 그 예입니다.

SELECT myfunction(3), CatID, CatName
    FROM myCats

기본 제공 함수

PostgreSQL에는 쿼리에서 사용할 수 있는 많은 기본 제공 함수가 포함되어 있습니다. 이 문서에서는 비교, 데이터 집계, 수학 함수 등을 다룹니다. postgreSQL 함수 전체 목록은 온라인 설명서를 참조하세요.

기본 제공 문자열 함수의 예는 서브스트링입니다.

substring (*string* text [ FROM *start* integer ] [ FOR *count* integer ] ) → text

이 함수는 세 가지 입력 매개 변수를 사용합니다.

  • 문자열(텍스트 입력)
  • FROM start(정수 입력)
  • FOR count(정수 입력)

부분 문자열은 입력 텍스트의 일부를 반환하며, 시작 문자에서 시작하여 개수 문자 후에 중지됩니다. 다음은 그 예입니다.

substring('Thomas' from 2 for 3) → hom
substring('Thomas' from 3) → omas
substring('Thomas' for 2) → Th

이 함수는 substr와 동일합니다.

substr ( *string* text, *start* integer [, *count* integer ] ) → text
substr('alphabet', 3) → phabet
substr('alphabet', 3, 2) → ph

비고

함수에 익숙한 경우 첫 번째 버전에서 인수를 구분하기 위해 쉼표가 아닌 키워드를 사용하는 것을 알 수 있습니다. PostgreSQL은 이러한 함수의 두 버전을 모두 제공합니다.