> 데이터 베이스 > MySQL 튜토리얼 > 단일 매개변수를 사용하여 PostgreSQL 함수에 여러 값을 전달하는 방법은 무엇입니까?

단일 매개변수를 사용하여 PostgreSQL 함수에 여러 값을 전달하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-10 06:33:41
원래의
1000명이 탐색했습니다.

How to Pass Multiple Values to a PostgreSQL Function Using a Single Parameter?

PostgreSQL 함수에서 단일 매개변수를 통해 여러 값 전달

이 가이드에서는 VARIADIC 유형에 초점을 맞추고 최적화 전략을 제공하면서 단일 매개변수를 사용하여 여러 값을 PostgreSQL 함수에 효율적으로 전달하는 방법을 보여줍니다.

VARIADIC 매개변수 활용

PostgreSQL의 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 j.id, j.reference, j.job_title,
       ltrim(right(j.status, -2)) AS status  -- Optimized string trimming
FROM jobs j
JOIN company c ON j.id = c.id
WHERE c.active
AND NOT c.delete_flag
AND NOT j.delete_flag
AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = )
ORDER BY j.job_title;
END;
$$ LANGUAGE plpgsql;</code>
로그인 후 복사

이 수정된 함수는 정수 배열(int[])을 입력으로 허용합니다. VARIADIC 키워드를 사용하면 함수가 다양한 개수의 정수 인수를 받아 자동으로 배열로 변환할 수 있습니다.

VARIADIC

을 사용한 함수 호출

배열을 사용하여 함수를 직접 호출할 수 있습니다.

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

기능적으로 다음과 동일합니다.

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

성능 향상 및 모범 사례

효율적인 문자열 자르기: PostgreSQL 9.1 이상의 경우 음수 길이(right())와 함께 right(j.status, -2)을 사용하면 substring()에 비해 선행 문자를 제거하는 더 빠르고 깔끔한 방법을 제공합니다.

데이터 유형 고려 사항: DeleteFlag이 부울 값을 나타내는 경우 boolean 데이터 유형을 사용하는 것이 text보다 더 효율적이고 의미상 정확합니다. WHERE 절에서 열 이름 주위에 불필요한 큰따옴표를 사용하지 마세요.

간소화된 함수(SQL 구현)

가독성 향상과 잠재적인 성능 향상을 위해 순수 SQL 구현을 고려하세요.

<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 j.id, j.reference, j.job_title
        , ltrim(right(j.status, -2)) AS status
   FROM job j
   JOIN company c ON j.id = c.id
   WHERE c.active
   AND NOT c.delete_flag
   AND NOT j.delete_flag
   AND (j.id = ANY() OR '{-1}'::int[] = )
   ORDER BY j.job_title
$func$ LANGUAGE sql;</code>
로그인 후 복사

이 단순화된 버전은 향상된 간결함으로 동일한 기능을 구현합니다. 특정 스키마와 일치하도록 테이블 및 열 이름을 조정하는 것을 잊지 마세요.

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

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