집 >데이터 베이스 >MySQL 튜토리얼 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!