728x90
반응형
SMALL

Data Base 163

231102 PL/SQL PROCEDURE RETURN문, EXCEPTION, RAISE_APPLICATION_ERROR, CASE-WHEN THEN ELSE END CASE;

# RETURN 문 : 프로시저 종료 # OR REPLACE 옵션 : 프로시저를 삭제, 생성할 경우, 권한은 그대로 생존. CREATE OR REPLACE PROCEDURE hr.query_emp ( p_id NUMBER ) IS v_rec hr.employees%ROWTYPE; BEGIN IF p_id IN (100, 101, 102) THEN -- TRUE RETURN; -- 종료 ELSE SELECT * INTO v_rec FROM hr.employees WHERE employee_id = p_id; DBMS_OUTPUT.PUT_LINE(v_rec.last_name||' works on '||v_rec.job_id||', earns $'||v_rec.salary||' per month.'); END..

Data Base/PL SQL 2023.11.02

231102 PL/SQL PROCEDURE 생성 후 권한 부여 및 회수

; - HR SESSION 에서 프로시저 생성 CREATE OR REPLACE PROCEDURE hr.query_emp ( p_id NUMBER ) IS v_rec hr.employees%ROWTYPE; BEGIN SELECT * INTO v_rec FROM hr.employees WHERE employee_id = p_id; DBMS_OUTPUT.PUT_LINE(v_rec.last_name||' works on '||v_rec.job_id||', earns $'||v_rec.salary||' per month.'); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('해당 사원이 없습니다'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_L..

Data Base/PL SQL 2023.11.02

231102 PL/SQL 서브프로그램(Sub Program), 프로시저, ERROR

■ PL/SQL 서브프로그램(Sub program) 1. 반복적으로 호출 할 수 있는 이름이 있는 PL/SQL 블록이다. 2. PL/SQL 블록 또는 다른 서브 프로그램 내에서 서브프로그램을 선언하고 정의할 수 있다. 3. 서브 프로그램은 프로시저, 함수, 패키지를 통칭해서 말한다. 1) 프로시저 : SELECT문, DML, COMMIT, ROLLBACK, SAVEPOTIN 업무작업 수행 → 함수 사용시 변수+EXECUTE 이용 2) 함수 : 값을 계산하고 반환할 때 사용. 기능 프로그램. (SQL 문장에 가능하면 X → 문제 가능성 ↑) 3) 패키지 : 프로시저+함수 : 프로시저, 함수를 '그룹화' 할 수 있음. ▷ IN(값, 상수) ,OUT(변수) ,IN OUT() 모드 != SIZE X # 표현식 ..

Data Base/PL SQL 2023.11.02

231101 PL/SQL 프로시저 컴파일, FORMAL PARLACE 형식매개변수, IN MODE, OUT MODE, IN-OUT MODE

[문제] 사원번호를 입력값으로 받아서 그 사원의 정보를 출력하는 프로그램을 작성해 주세요. execute :b_id :=100; print :b_id; DECLARE v_id NUMBER := :b_id; v_rec hr.employees%ROWTYPE; BEGIN SELECT * INTO v_rec FROM hr.employees WHERE employee_id = v_id; dbms_output.put_line(v_rec.employee_id||' '||v_rec.last_name); EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line(v_id||' 사원은 존재하지 않습니다.'); END; / # 바인드변수 프로그램외 사용가능+ 익명블록구조 내에서만 사용..

Data Base/PL SQL 2023.11.01

231031 PL/SQL EXCEPTION(예외처리)

■ exception (예외처리) 1. 실행 중에 발생한 PL/SQL 오류 2. Oracle에 의해서 암시적으로 발생. 3. 프로그램에 의해서 명시적으로 발생. DECLARE v_id NUMBER := 300; v_rec hr.employees%rowtype; BEGIN SELECT * INTO v_rec FROM hr.employees WHERE employee_id = v_id; dbms_output.put_line(v_rec.employee_id||' '||v_rec.last_name); END; / # 예외 처리 DECLARE v_id NUMBER := 300; v_rec hr.employees%rowtype; BEGIN SELECT * INTO v_rec FROM hr.employees WHER..

Data Base/PL SQL 2023.10.31

231031 PL/SQL CURSOR

# 실행계획을 공유하면 안되는 경우, DATA의 분포도에 따라(불균등) SELECT employee_id, last_name, job_id FROM hr.employees WHERE department_id = 80 AND job_id = 'SA_MAN'; SELECT employee_id, last_name, job_id FROM hr.employees WHERE department_id = 50 AND job_id = 'ST_MAN'; DECLARE CURSOR param_cur_80 IS SELECT employee_id, last_name, job_id FROM hr.employees WHERE department_id = 80 -- 값을 변수 AND job_id = 'SA_MAN'; -- 값을 ..

Data Base/PL SQL 2023.10.31

231030 PL/SQL CURSOR, 명시적 CURSOR

■ CURSOR - SQL 문 실행 메모리 영역 - PARSE, BIND, EXECUTE(ACTIVE SET), FETCH(ACTIVE SET 결과를 화면 출력 VS 프로그램 변수에 LOAD 하는 단계) - 암시적 커서(Implicit CURSOR) 1. SELECT .. INTO 절 : 반드시 1개 행 값만 FETCH해야 함. 2. 오라클이 자동으로 커서 관리를 한다. - 0개 행 : NO_DATA_FOUND - 2개 이상 : TOO_MANY_ROWS 3. DML(INSERT, UPDATE, DELETE, MERGE), TCL(COMMIT, ROLLBACK, SAVEPOINT) - 명시적 커서(Explicit CURSOR) 1. 여러개의 행을 FETCH 해야 한다면 명시적 커서를 이용해야 한다. 2. ..

Data Base/PL SQL 2023.10.30

231030 PL/SQL 중첩테이블(NESTED TABLE) , VARRAY(VARIABL-SIZE ARRAY) 가변길이의 배열방식, 2차원 배열

■ NESTED TABLE(중첩테이블) - index by table 과 달리 인덱스키(요소번호)는 자동으로 1번 시작해서 최대 2G 생성할 수 있다. # v_city tab_char_type := tab_char_type('서울', '대전', '부산', '광주'); - 사용하는 경우: 값을 알고 있고, 값이 적을 경우에 사용 DECLARE TYPE tab_char_type IS TABLE OF varchar2(10); v_city tab_char_type := tab_char_type('서울', '대전', '부산', '광주'); -- 초기값입력 및 타입 BEGIN DBMS_OUTPUT.PUT_LINE(v_city.FIRST); DBMS_OUTPUT.PUT_LINE(v_city.LAST); DBMS_OU..

Data Base/PL SQL 2023.10.30

231027 PL/SQL 조합 데이터 _ 1차원 배열, 레코드 변수, 배열 변수

■ 조합데이터 유형 - 다중값을 보유할 수 있다. - 레코드 변수 : 서로 다른 유형의 값을 저장한다. ex) SELECT * 문 - 배열 변수 : 동일한 데이터 유형(1차원 배열)의 값을 저장한다. - index by table (연관 배열) - nested table (중첩 테이블) - varray 1. 레코드 변수 TYPE 레코드명 IS RECORD( 필드명1 필드1 타입 [[NOT NULL] := 디폴트값], 필드명2 필드2 타입 [[NOT NULL] := 디폴트값], ... 필드명N 필드N 타입 [[NOT NULL] := 디폴트값], ); 레코드변수명 레코드명; DECLARE TYPE dept_record_type IS RECORD ( dept_id NUMBER, -- TABLE의 타입과 사이즈..

Data Base/PL SQL 2023.10.30

231026 PL/SQL SQL문

■ PL/SQL 의 SQL문 1. SELECT 문을 이용해서 데이터베이스에 있는 데이터를 추출할 수 있다. 2. DML(INSERT, UPDATE, DELETE, MERGE) 문을 이용해서 DB에 있는 데이터를 입력, 삭제, 수정할 수 있다. 3. COMMIT, ROLLBACK, SAVEPOINT 문을 이용해서 트랜잭션을 처리할 수 있다. # 오류발생: 변수에 로드하는 작업이 필요 -- PLS-00428: an INTO clause is expected in this SELECT statement BEGIN SELECT last_name, salary FROM hr.employees WHERE employee_id = 100; END; / # cursor : SQL문 실행 메모리 영역 (parse, bi..

728x90
반응형
LIST