Recent Comments
Link
Recent Posts
Today
Total
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

Study Memory Work

[PostgreSQL] 함수 Retrun 타입 비교 Table vs SETOF records 본문

DB/PostgreSQL

[PostgreSQL] 함수 Retrun 타입 비교 Table vs SETOF records

Hera Choi 2024. 4. 24. 14:56

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;