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

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

DDD
DDD원래의
2025-01-10 07:55:41738검색

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

VARIADIC 매개변수를 사용하여 단일 매개변수에 여러 값 전달

VARIADIC 매개변수를 사용하여 함수 만들기

단일 매개변수에 여러 값을 전달하려면 VARIADIC 데이터 유형을 사용할 수 있습니다. 이를 통해 매개변수에 대한 값 배열을 지정할 수 있습니다. job_ids라는 VARIADIC 매개변수를 허용하도록 다음 함수를 수정합니다.

<code class="language-sql">CREATE OR REPLACE FUNCTION test_var(VARIADIC job_ids int[])
RETURNS TABLE (
  job_id int,
  job_reference int,
  job_job_title text,
  job_status text
) AS $$
BEGIN
  RETURN QUERY
  SELECT
    jobs.id,
    jobs.reference,
    jobs.job_title,
    ltrim(right(jobs.status, -2)) AS status  -- 使用right()函数改进字符串处理
  FROM
    jobs
  INNER JOIN
    company c ON c.id = jobs.id  -- 使用INNER JOIN改进查询效率
  WHERE
    jobs."DeleteFlag" = '0' AND
    c.DeleteFlag = '0' AND
    c.active = '1' AND
    (jobs.id = ANY(job_ids) OR job_ids = '{ -1 }') -- 简化条件判断
  ORDER BY
    jobs.job_title;
END;
$$ LANGUAGE plpgsql;</code>

VARIADIC 매개변수를 사용한 호출 기능

이제 job_ids 매개변수에 값 배열을 전달하여 test_var 함수를 호출할 수 있습니다. 예:

<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>

이렇게 하면 ID가 270 및 378인 작업 데이터가 반환됩니다.

기능 개선 및 추가 제안

VARIADIC 매개변수를 사용하는 것 외에도 right() 함수를 음수 길이와 함께 사용하여 문자열 시작 부분의 문자를 잘라낼 수도 있습니다. 이는 substring을 사용하는 것보다 더 빠르고 간단합니다.

또한 DeleteFlag 열의 데이터 유형이 텍스트가 아닌 부울인지 확인하세요. 이를 통해 정확한 비교와 효율성이 보장됩니다.

마지막으로 답변에 제공된 f_test 함수는 PL/pgSQL의 사용을 피하고 이러한 문제를 해결하는 간결한 SQL 함수를 보여줍니다. 실제 요구 사항에 따라 적절한 기능 구현 방법을 선택하는 것이 좋습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.