본문 바로가기

PL/SQL Tutorial - Record PL/SQL record는 multiple fields를 가진다. 구조체로 이해하면 편할 것 같다. 1) Declaring records DECLARE record_name table_name%ROWTYPE; 간단하다. 실제로 contats의 row 구조를 record로 저장하는 경우는 아래와 같다. DECLARE r_contact contacts%ROWTYPE; 2) Cursor-based record DECLARE record_name cursor_name%ROWTYPE; 안봐도 느낌이 커서의 구조를 가져가는 record이다. DECLARE CURSOR cur_contacts IS SELECT first_name, last_name, phone FROM contacts; r_contact cur_co..
PL/SQL Tutorial - Variables with REF CURSOR cursor variable DECLARE TYPE customer_data_t IS REF CURSOR RETURN customers%ROWTYPE; customer_cur customer_data_t; example로 이해해보자. -- function CREATE OR REPLACE FUNCTION get_direct_reports( p_manager_id IN employees.manager_id%TYPE) RETURN SYS_REFCURSOR AS c_direct_reports SYS_REFCURSOR; BEGIN OPEN c_direct_reports FOR SELECT employee_id, first_name, last_name, email FROM employees WHERE manager..
PL/SQL Tutorial - Parameters CURSOR cursor_name (parameter_list) IS cursor_query; parameter가 뭔지도 알고 cursor이 뭔지도 아는데 이걸 합치니 뭔지 모르겠다. 한 번 살펴보자. 일단 cursor open은 이렇게 한다. OPEN cursor_name (value_list); DECLARE rec_product products%ROWTYPE; CURSOR cur_product (low_price NUMBER, high_price NUMBER) IS SELECT * FROM products WHERE list_price BETWEEN low_price AND high_price; BEGIN -- mass products DBMS_OUTPUT.PUT_LINE('Mass products..
PL/SQL Tutorial - Cursor FOR LOOP CURSOR FOR LOOP는 FOR LOOP의 extension 버전이다. 기존의 FOR LOOP가 lower -> upper를 한 번씩 도는 반복문이라면 CURSOR은 반환된 행에 대해 반복을 실행한다. FOR LOOP CURSOR는 암시적으로 루프 인덱스 생성 이후 커서를 연다. FOR record IN cursor_name LOOP process_record_statements; END LOOP; 1) record - LOOP 안에서만 사용하는 INDEX 2) cursor_name - select_statement와 같다 백문이 불여일견이라 한 번 사용해보자. DECLARE CURSOR cur_product IS SELECT product_name, list_price FROM products O..
PL/SQL Tutorial - Cursor Cursor : 쿼리 결과를 가리키는 포인터 / 쿼리 결과를 잠깐 동안 저장하고 있는 변수라고 생각하면 된다. - 암시적커서 - 명시적커서 (1) Implicit cursors (암시적 커서) - SELECT INTO, INSERT, UPDATE, DELETE는 implicit cursor을 생성 - cursor는 SQL%ROWCOUNT, SQL%ISOPEN, SQL%FOUND, SQL%NOTFOUND의 status를 가지고 있음 - 만일 query가 zero or multiple row일 경우 exception을 보여줌 (2) Explicit cursors (명시적 커서) - OPEN, FETCH, CLOSE의 execution cycle을 가지고 있음. 사실 잘 이해는 안간다. 예시를 통해 이해해보도..