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

PL/pgSQL을 사용하여 PostgreSQL에서 여러 필드를 단일 레코드로 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-05 05:49:43609검색

How to Retrieve Multiple Fields as a Single Record in PostgreSQL Using PL/pgSQL?

PL/pgSQL을 사용하여 PostgreSQL에서 여러 필드를 레코드로 검색

데이터베이스 상호 작용 작업을 할 때 여러 테이블에서 데이터를 가져와서 다음과 같이 표시해야 하는 경우가 많습니다. 통일된 기록. PostgreSQL에서는 PL/pgSQL의 RECORD 유형을 사용하여 이 기능을 허용하므로 개발자는 다양한 테이블의 필드를 단일 레코드 내의 필드로 검색할 수 있습니다.

다른 테이블의 필드를 단일 레코드로 반환

하려면 여러 테이블의 필드를 단일 레코드의 필드로 검색하는 경우 PL/pgSQL은 RECORD 유형을 사용합니다. 다음은 예제의 수정된 버전입니다.

CREATE OR REPLACE FUNCTION get_object_fields(name text)
  RETURNS RECORD AS $$
BEGIN
  -- Fetch fields f1, f2, and f3 from table t1
  -- Fetch fields f4, f5 from table t2
  -- Fetch fields f6, f7, and f8 from table t3

  -- Create a record to store the fetched fields
  RETURN RECORD(
    f1 TEXT,
    f2 TEXT,
    f3 TEXT,
    f4 TEXT,
    f5 TEXT,
    f6 TEXT,
    f7 TEXT,
    f8 TEXT
  );
END
$$ language plpgsql;

단일 테이블의 여러 필드가 있는 행 처리

특정 필드가 단일 테이블의 여러 행에 걸쳐 저장될 수 있는 상황을 처리할 때, RECORD 유형은 여전히 ​​효과적으로 사용될 수 있습니다. 'user' 테이블이 있는 예에서는 다음과 같이 코드를 수정할 수 있습니다.

CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int)
  RETURNS my_type AS $$
DECLARE
  result my_type;
  temp_result RECORD;
  user1 RECORD;
  user2 RECORD;
BEGIN
  SELECT id, name INTO temp_result FROM user WHERE school_id = schoolid LIMIT 2;

  -- Split the fetched rows into individual user records
  user1.user1_id := temp_result.id;
  user1.user1_name := temp_result.name;

  -- Handle the second row if available
  IF FOUND THEN
    user2.user2_id := temp_result.id;
    user2.user2_name := temp_result.name;
  END IF;

  -- Return the combined user record
  result.user1_id := user1.user1_id;
  result.user1_name := user1.user1_name;
  result.user2_id := user2.user2_id;
  result.user2_name := user2.user2_name;

  RETURN result;
END
$$ language plpgsql;

다형성 결과 처리

CREATE TYPE을 사용하는 것이 다형성 결과를 반환하는 데 적합해 보일 수 있지만, PL/ pgSQL은 보다 유연하고 강력한 접근 방식을 제공합니다. RECORD 유형을 남용하면 입력에 따라 다양한 수의 열을 반환할 수 있으므로 선택적 오류 메시지나 추가 정보를 처리하는 데 적합합니다.

예는 다음과 같습니다.

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

이 함수는 입력에 따라 2개 또는 3개의 열을 동적으로 반환하며 성공 상태 및 선택적 오류 메시지 반환과 같은 다양한 시나리오에 사용할 수 있습니다.

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

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