DBMS/PLSQL(13)
-
sys_refcursor
sys_refcursor는 PL/SQL 프로시저나 함수 내에서 결과 집합을 반환하는 데 사용되는 데이터 타입이다. 주로 저장 프로시저나 함수에서 여러 행의 데이터를 반환한다. sys_refcursor의 주요 사용 목적: - 다중 행 데이터 반환: 저장 프로시저나 함수가 쿼리 결과를 반환할 때, 여러 행을 반환하는 용도로 사용된다. - 다른 프로그램과의 연동: sys_refcursor로 반환된 데이터를 다른 프로그램이나 쿼리에서 활용할 수 있어 유연성이 좋다. 직원 정보를 저장하는 employees 테이블이 있다고 가정.이 테이블에서 모든 직원을 검색하는 프로시저를 만들고, 그 결과를 sys_refcursor로 반환하여 다른 프로그램에서 사용할 수 있도록 설정 CREATE TABLE employees (..
2024.09.09 -
조합 변수(Composite Variables)
조합 변수(Composite Variables)는 여러 데이터를 하나의 구조로 묶어서 저장할 수 있는 변수이며 한 변수가 여러 필드를 포함할 수 있는 구조를 갖추고 있어 데이터 구조를 효율적으로 관리할 수 있다. Oracle PL/SQL에서 대표적인 조합 변수의 종류는 레코드(Record) 와 컬렉션(Collection)이다. 레코드(Record)레코드는 여러 개의 필드를 하나의 그룹으로 묶어서 사용할 수 있는 조합 변수이다. 각 필드는 서로 다른 데이터 타입을 가질 수 있으며, 개별 필드에 접근하여 값을 할당하거나 읽을 수 있다. - 사용자 정의 레코드 : 사용자가 직접 정의한 레코드 타입이다. 사용자 정의 레코드는 TYPE 키워드를 사용하여 선언하고, 여러 필드를 포함할 수 있다. DEC..
2024.09.09 -
WHERE CURRENT OF 절 | 명시적 커서
■ WHERE CURRENT OF 절은 PL/SQL에서 명시적 커서를 사용할 때, 커서가 현재 가리키고 있는 행을 대상으로 UPDATE 또는 DELETE 작업을 수행하는 데 사용된다. FETCH 문으로 가져온 특정 행에 대해 바로 작업을 수행할 수 있도록 하며, 특히 행을 유니크하게 식별할 수 있는 조건을 따로 작성할 필요 없이 현재 커서가 가리키는 행만을 처리할 때 유용하다. DECLARE CURSOR emp_cursor IS SELECT empno, sal FROM emp WHERE deptno = 10 FOR UPDATE; emp_record emp_cursor%ROWTYPE;BEGIN OPEN emp_cursor; LOOP FETCH emp_cursor INTO emp_r..
2024.09.08 -
특정 부서 번호를 입력받아 삭제
주어진 부서 ID를 사용자로부터 입력 받아서 해당 부서를 삭제하고, 삭제된 부서에 속한 사원이 있을 경우에 대한 무결성 제약 조건 위반 예외를 처리DECLARE EXPT_EXISTS EXCEPTION; PRAGMA EXCEPTION_INIT(EXPT_EXISTS, -02292); --ORA-02292 무결성 제약 조건 위반 발생시 블록 종료+ 메시지 V_DEPTID DEPARTMENTS_TEST.DEPARTMENT_ID%TYPE := &DEPTID; BEGIN DBMS_OUTPUT.PUT_LINE(V_DEPTID || ' 부서 삭제중'); DELETE DEPARTMENTS_TEST WHERE DEPARTMENT_ID =V_DEPTID; DBMS_OU..
2024.06.03 -
부서 ID의 최대값 조회 및 새로운 부서 ID 생성
--부서 ID의 최대값 조회 및 새로운 부서 ID 생성: DEPARTMENTS 테이블에서 가장 큰 DEPARTMENT_ID 값을 조회하여 새로운 부서 ID를 생성 --새로운 부서 삽입: 생성한 새로운 부서 ID와 부서 이름을 DEPARTMENTS 테이블에 삽입 --예외 처리: 삽입 중 발생할 수 있는 다양한 예외 상황을 처리하고, 필요시 에러 로그를 기록 CREATE TABLE DEPARTMENTS_TEST AS SELECT * FROM DEPARTMENTS;CREATE TABLE ERROR_LOG(ERROR_TIMESTAMP TIMESTAMP,ERROR_CODE NUMBER,ERROR_MESSAGE VARCHAR2(4000));COMMIT;DECLARE E_DUP_EXCEP EXCEPTION; ..
2024.06.03 -
스키마 테이블 모두 삭제
BEGIN FOR cur_rec IN (SELECT object_name, object_type FROM user_objects WHERE object_type IN ('TABLE', 'VIEW', 'INDEX', 'SEQUENCE', 'SYNONYM')) LOOP BEGIN IF cur_rec.object_type = 'TABLE' THEN EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '" CASCADE CONSTRAINTS'; ELSE EXECUTE IMMEDIATE 'DROP ' || c..
2024.05.30