>데이터 베이스 >MySQL 튜토리얼 >PL/pgSQL을 사용하여 여러 PostgreSQL 테이블에서 레코드 필드를 검색하고 결합하는 방법은 무엇입니까?

PL/pgSQL을 사용하여 여러 PostgreSQL 테이블에서 레코드 필드를 검색하고 결합하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-04 13:56:40190검색

How to Retrieve and Combine Record Fields from Multiple PostgreSQL Tables using PL/pgSQL?

PL/pgSQL을 사용하여 PostgreSQL의 여러 테이블에서 레코드 필드 검색

PL/pgSQL에서 서로 다른 테이블의 여러 필드를 단일 레코드로 반환하려면 다음을 사용하여 사용자 정의 레코드를 구성해야 합니다. 원하는 필드 구성. 이를 달성하는 방법은 다음과 같습니다.

레코드 데이터 유형 생성

CREATE TYPE 문을 사용하여 필드와 해당 데이터 유형을 지정하여 레코드 유형을 정의합니다.

CREATE TYPE my_record_type AS (
  field1 text,
  field2 integer,
  field3 boolean
);

함수 구현

SP에서는 DECLARE 문을 사용하여 레코드 종류의 변수를 선언하고 필드 채우기:

DECLARE
  result my_record_type;
BEGIN
  SELECT field1, field2, field3 INTO result FROM table1;
  -- Retrieve and populate additional fields from other tables
  RETURN result;
END

여러 행 결과 처리

테이블에서 여러 행을 검색하여 단일 레코드로 집계하려면 하위 쿼리 사용을 고려하세요. 예를 들어, 사용자 테이블에서 행을 검색하고 평면화하려면:

DECLARE
  result my_record_type;
BEGIN
  SELECT id, name FROM (
    SELECT id, name
    FROM user
    WHERE school_id = InputSchoolId
    LIMIT 2
  ) AS subquery
  INTO result;
RETURN result;
END

레코드 반환 유형 사용

함수를 정의한 후 함수를 호출하여 레코드를 검색하세요.

SELECT get_object_fields('name') AS record_output;

결과는 지정된 필드를 포함하는 레코드가 됩니다.

참고

다형성 결과에 CREATE TYPE을 사용하는 것은 권장되지 않지만 유연성을 위해 RECORD 유형을 활용할 수 있습니다. 예:

CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$
DECLARE 
  result RECORD;
BEGIN
  IF LENGTH(a) < LENGTH(b) THEN
    result = (TRUE, (a || b)::text, 'a shorter than b'::text);
  ELSE
    result = (FALSE, (b || a)::text, NULL::text);
  END IF;
RETURN result;
END;$$ LANGUAGE plpgsql;

이를 통해 다양한 수의 열이 포함된 레코드를 반환할 수 있습니다.

위 내용은 PL/pgSQL을 사용하여 여러 PostgreSQL 테이블에서 레코드 필드를 검색하고 결합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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