Study Memory Work
[PostgreSQL] 함수 Retrun 타입 비교 Table vs SETOF records 본문
SETOF records로 반환
장점
- 동적으로 생성된 결과 집합을 반환합니다. 결과 집합은 여러 행과 열을 포함할 수 있으며, 열의 수와 형식이 동적으로 결정됩니다.
- 함수가 다양한 형식의 결과를 반환하거나, 반환 데이터의 형식이 실행 시간에 결정되는 경우에 유용합니다.
단점
- SETOF RECORDS를 사용하면 다양한 형식의 데이터를 반환할 수 있지만, 결과의 형태를 파악하기 어려울 수 있습니다.
- 일부 쿼리에서는 SETOF RECORDS를 사용하여 결과 집합을 동적으로 생성해야 하는 경우가 있습니다. 이 경우 성능이 좋지 않을 수 있습니다.
- 아래 예시에서 처럼 반환 값을 바로 테이블로서 쿼리에 사용하지 못한다. 서브쿼리를 사용하거나 예시처럼 타입을 다 지정해주어야 함.
CREATE TABLE employees (
employee_id INT,
employee_name TEXT,
department TEXT
);
INSERT INTO employees VALUES (1, 'Alice', 'HR');
INSERT INTO employees VALUES (2, 'Bob', 'IT');
INSERT INTO employees VALUES (3, 'Charlie', 'Marketing');
CREATE FUNCTION get_employees_in_department(dep TEXT) RETURNS SETOF employees AS $$
SELECT * FROM employees WHERE department = dep;
$$ LANGUAGE SQL;
---
SELECT * FROM get_employees_in_department('HR'); ---- X
SELECT * FROM get_employees_in_department('HR') AS (employee_id INT, employee_name TEXT, department TEXT);
Table로 반환
장점
- TABLE 반환 타입은 정의된 테이블과 동일한 형식의 결과를 반환합니다. 따라서 함수가 고정된 열을 반환하는 경우에 적합합니다.
- 함수를 호출할 때 반환되는 열의 수와 형식을 미리 알 수 있으므로 사용자가 반환되는 데이터를 쉽게 이해하고 처리할 수 있습니다.
- 단일 함수 호출로 데이터를 반환하므로 일반적으로 성능이 좋습니다.
단점
- OUT, INOUT 인자를 사용할 수 없습니다.
- 모든 결과 컬럼을 TABLE에 정의해야 한다.
CREATE FUNCTION get_employee_info_table(employee_id INT) RETURNS TABLE(name VARCHAR(100), salary NUMERIC) AS $$
BEGIN
RETURN QUERY
SELECT e.name, e.salary
FROM employees e
WHERE e.id = employee_id;
END;
$$ LANGUAGE plpgsql;
'DB > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 함수 내에서 테이블 데이터 row 갯수 추출하기 (record) (0) | 2024.04.25 |
---|---|
[PostgreSQL] 함수 내에서 테이블(임시테이블) 컬럼명 추출하기 (0) | 2024.04.25 |
[PostgreSQL] 데이터 타입 (0) | 2024.04.24 |
[PostgreSQL] Procedural 프로시저; PL/pgSQL (0) | 2024.04.23 |
[PostgreSQL] CTE: Common Table Expression (0) | 2024.04.23 |