두 개의 테이블을 조인할 때 조인 조건으로 사용할 컬럼이 있어야한다.
다음 함수는 두 개의 테이블에서 서로 같은 이름을 가진 컬럼을 가져와 조인 조건절 형태로 반환해준다.
CREATE OR REPLACE FUNCTION get_joinable_columns
(
p_table_1 USER_TABLES.TABLE_NAME%TYPE, -- 비교 테이블 대상 1
p_table_2 USER_TABLES.TABLE_NAME%TYPE -- 비교 테이블 대상 2
)
return VARCHAR2
IS
v_join_clause VARCHAR2(4000);
TYPE column_array IS VARRAY(10) OF VARCHAR2(4000);
v_column_array column_array;
BEGIN
SELECT *
BULK COLLECT INTO
v_column_array
FROM (SELECT COLUMN_NAME
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = p_table_1
INTERSECT
SELECT COLUMN_NAME
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = p_table_2);
FOR idx IN 1..v_column_array.count LOOP
IF idx > 1 THEN
v_join_clause := v_join_clause || ', ';
END IF;
v_join_clause := v_join_clause || p_table_1 || '.' || v_column_array(idx) || ' = ' || p_table_2 || '.' || v_column_array(idx);
END LOOP;
return v_join_clause;
END;
사용 예시
SELECT get_joinable_columns('DEPARTMENTS', 'EMPLOYEES')
FROM DUAL;

'데이터베이스 > Oracle' 카테고리의 다른 글
| [PL/SQL] BULK COLLECT INTO (0) | 2023.07.11 |
|---|---|
| [PL/SQL] 동적쿼리 (EXECUTE IMMEDIATE) (0) | 2023.07.11 |
| [OracleDB] Snake Case를 Camel Case로 변환하는 함수 (0) | 2023.06.15 |
| [OracleDB] SELECT절을 위한 컬럼명 생성 함수 (0) | 2023.06.15 |
| [OracleDB] 실행계획 (Execution Plan) (0) | 2023.06.15 |