> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL 함수의 단일 매개변수에 여러 값을 전달하려면 어떻게 해야 합니까?

PostgreSQL 함수의 단일 매개변수에 여러 값을 전달하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-10 08:11:41
원래의
225명이 탐색했습니다.

How Can I Pass Multiple Values to a Single Parameter in a PostgreSQL Function?

PostgreSQL 함수 단일 매개변수 다중 값 전달

PostgreSQL은 단일 매개변수를 사용하여 여러 값을 함수에 전달하는 편리한 방법을 제공하며, 이는 VARIADIC 매개변수를 사용하여 달성할 수 있습니다.

VARIADIC 매개변수 구문

VARIADIC 매개변수의 구문은 다음과 같습니다.

<code class="language-sql">CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)</code>
로그인 후 복사

여기서 VARIADIC은 매개변수가 여러 값을 허용할 수 있음을 나타냅니다. 参数数据类型 전달될 값의 데이터 유형을 지정합니다.

다중 값 전달 예시

다음 함수는 여러 정수 값을 허용합니다.

<code class="language-sql">CREATE OR REPLACE FUNCTION test(VARIADIC int[])
RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS
$$
BEGIN
  RETURN QUERY
  SELECT *
  FROM jobs
  WHERE job_id = ANY()
  ORDER BY job_job_title;
END;
$$ LANGUAGE plpgsql;</code>
로그인 후 복사

이 함수는 쉼표로 구분된 여러 정수 값을 전달하여 호출할 수 있습니다.

<code class="language-sql">SELECT * FROM test(270, 378);</code>
로그인 후 복사

배열 사용을 위한 대체 구문

PostgreSQL 9.1 이상에서는 배열 유형을 사용하여 VARIADIC 매개변수 함수를 직접 호출할 수도 있습니다. 다음 코드는 이전 예제와 동일합니다.

<code class="language-sql">SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);</code>
로그인 후 복사

기타 성능 최적화 제안

  • right() 함수의 음수 인수를 사용하여 문자열 시작 부분의 문자를 제거합니다. 이는 substring() 함수를 사용하는 것보다 빠릅니다.
  • "DeleteFlag"과 같이 열 이름 주위에 큰따옴표를 사용하지 마세요.
  • 플래그를 표시하려면 text과 같은 문자 데이터 유형 대신 적절한 부울 데이터 유형을 사용하세요.

최적화된 기능

위의 최적화를 적용하여 원래 기능이 개선된 버전은 다음과 같습니다.

<code class="language-sql">CREATE OR REPLACE FUNCTION f_test(VARIADIC int[])
RETURNS TABLE (id int, reference int, job_title text, status text) AS
$func$
SELECT id, reference, job_title, ltrim(right(status, -2)) AS status
FROM company c
JOIN job j USING (id)
WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag
AND id = ANY()
ORDER BY job_title;
$func$ LANGUAGE sql;</code>
로그인 후 복사

위 내용은 PostgreSQL 함수의 단일 매개변수에 여러 값을 전달하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿