레코드 (Record) 레코드는 여러 가지 데이터 타입을 가질 수 있는 복합 자료 구조이며 테이블의 한 개의 행(Row)에 대응한다. 여러 개의 컬럼과 한 개의 행을 가지는 형태로 Java에서 다양한 데이터 타입의 변수를 가지는 클래스와 비슷하다고 볼 수 있다. 레코드는 사용자 정의형, 테이블형, 커서형 레코드로 나뉜다. 1. 사용자 정의형 레코드 사용자 정의형은 사용자가 직접 컬럼 구조를 정의한 레코드이다. TYPE 레코드명 IS RECORD ( 필드명1 데이터타입 [[NOT NULL] := 기본값], 필드명2 데이터타입 [[NOT NULL] := 기본값], ... ); * 주의 필드가 NOT NULL일 경우 반드시 기본값 옵션을 사용해야 한다. DECLARE TYPE R_EMP IS RECORD( E..
1. DELETE 컬렉션의 요소를 삭제하는 프로시저. 변수명.DELETE : 모든 요소 삭제 변수명.DELETE(n) : 인덱스가 n인 요소 삭제 변수명.DELETE(n, m) : 인덱스가 n ~ m인 요소 삭제 DECLARE TYPE T_NUM_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; NUM_ARRAY T_NUM_ARRAY; BEGIN FOR i IN 1..5 LOOP NUM_ARRAY(i) := i; END LOOP; DBMS_OUTPUT.PUT_LINE('NUM_ARRAY 출력 (삭제 전)'); FOR i IN 1..NUM_ARRAY.COUNT LOOP DBMS_OUTPUT.PUT_LINE(NUM_ARRAY(i)); END LOOP; NUM_ARRAY..
1. 컬렉션 (Collection) PL/SQL에서 다양한 데이터 타입을 가지면서 여러 로우(Row)에 해당하는 데이터를 가질 수 있는 자료 구조이다. 다른 프로그래밍 언어에서 볼 수 있는 리스트나 맵과 비슷한 기능을 한다. TYPE 키워드를 사용해서 사용할 컬렉션의 구조를 정의할 수 있다. 주의해야할 점은 실제로 사용할 컬렉션은 TYPE 키워드로 선언한 타입을 사용해서 변수를 다시 한 번 선언해주어야 한다. 또한 PL/SQL의 컬렉션의 인덱스는 다른 프로그래밍 언어의 배열과 다르게 1부터 시작한다. DECLARE TYPE 타입명 IS TABLE OF NUMBER INDEX BY INTEGER_BINARY; -- TYPE 선언 변수명 타입명; -- 해당 TYPE을 가지는 컬렉션 변수 선언 BEGIN EN..
PL/SQL의 SELECT ~ INTO ~ 구문에서 INTO 앞에 BULK COLLECT 키워드를 사용하면 여러 개의 행이 반환될 때 데이터를 한 번에 받을 수 있다. DECLARE TYPE FRU_TAB IS TABLE OF FRUITS%ROWTYPE INDEX BY BINARY_INTEGER; FRU_TAB_OBJ FRU_TAB; BEGIN SELECT * BULK COLLECT INTO FRU_TAB_OBJ FROM FRUITS ORDER BY 1; FOR I IN 1..FRU_TAB_OBJ.COUNT LOOP DBMS_OUTPUT.PUT_LINE('ID : ' || FRU_TAB_OBJ(I).ID || ', NAME : ' || FRU_TAB_OBJ(I).NAME || ', PRICE : ' ||..
두 개의 테이블을 조인할 때 조인 조건으로 사용할 컬럼이 있어야한다. 다음 함수는 두 개의 테이블에서 서로 같은 이름을 가진 컬럼을 가져와 조인 조건절 형태로 반환해준다. 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 *..
데이터베이스의 컬럼명은 Snake Case로 작성하는 경우가 많다. 반면 Java에서 변수명은 Camel Case로 작성한다. DTO, VO 등의 객체를 생성할 때 컬럼명(snake_case)을 변수명(camelCase)으로 변환하기 위한 함수 CREATE OR REPLACE FUNCTION to_camel_case ( p_snake_case USER_TAB_COLUMNS.COLUMN_NAME%TYPE ) RETURN VARCHAR2 IS v_underbar_index NUMBER := 0; v_camel_case VARCHAR2(4000) := LOWER(p_snake_case); BEGIN LOOP SELECT INSTR(v_camel_case, '_') INTO v_underbar_index FRO..
SELECT절에 컬럼명을 나열해야할 때 특정 테이블의 컬럼명을 가져오고 별칭(Alias)을 붙일 수 있는 함수 CREATE OR REPLACE FUNCTION get_column_names ( p_table_name USER_TAB_COLUMNS.TABLE_NAME%TYPE, -- 테이블명 p_column_alias USER_TAB_COLUMNS.TABLE_NAME%TYPE -- 컬럼 앞에 붙을 별칭, ''으로 입력하면 생략 가능 ) RETURN VARCHAR2 IS v_column_in_line VARCHAR2(4000); BEGIN SELECT CASE WHEN p_column_alias IS NULL OR p_column_alias = '' THEN LISTAGG(LOWER(column_name),..