본문 바로가기

분류 전체보기

(657)
032 - [Oracle PL/SQL] Procedure - (IN parameter)/ Error 처리 # CLI 환경에서 컴파일하는 방법 # 세미콜론을 누락해서 오류가 발생한 상황과 오류를 조회하는 방법 SQL> CREATE OR REPLACE PROCEDURE UPDATE_SAL (P_EMP_ID IN NUMBER, P_AMOUNT IN NUMBER) IS --here you define variables --n number; BEGIN UPDATE employees set salary=salary+P_AMOUNT where employee_id=P_EMP_ID -- 세미콜른 삭제하고 컴파일해서 오류 확인하기 commit; exception WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLCODE); DBMS_OUTPUT.PUT_LINE (SQLERRM); END; 2 3 4..
031 - [Oracle PL/SQL] Procedure Anonymous Blocks 와 Subprograms 간의 차이점은 아래와 같다 다음과 같은 특징들이 있다. Oracle에서 익명 블록은 PL/SQL 문을 하나의 단위로 실행하는 것을 말합니다. 아래와 같은 장점이 있습니다: 캡슐화: 익명 블록을 사용하면 SQL 및 PL/SQL 문을 하나의 논리적인 단위로 캡슐화할 수 있습니다. 코드를 논리적으로 구성하고 정리하는 데 도움이 됩니다. 변수 선언 및 초기화: 익명 블록 내에서 변수를 선언하고 초기화할 수 있습니다. 이는 변수의 범위를 더 잘 제어하고 명명 충돌을 피하는 데 도움이 됩니다. 트랜잭션 제어: 익명 블록을 사용하여 COMMIT 및 ROLLBACK 문을 사용하여 트랜잭션을 명시적으로 제어할 수 있습니다. 일련의 작업의 원자성을 보장해야 하는 경우..
030 - [Oracle PL/SQL] Exceptions - Group Functions and Blocks # 아래와 같은 경우, 입력창에서 '1'을 입력하면 데이터가 없지만 오류가 발생하지는 않는다. # 그래서 원하는 결과가 안 나올수도 있다. Declare v_sum_sal number; begin select sum(salary) into v_sum_sal from employees where DEPARTMENT_ID=&dno; DBMS_OUTPUT.PUT_LINE('the sum is: ['||v_sum_sal||']'); DBMS_OUTPUT.PUT_LINE(sql%rowcount); EXCEPTION when no_data_found then DBMS_OUTPUT.PUT_LINE('no data found'); end; # 아래와 같은 경우, 입력창에서 '1'을 입력하면 조건문에서 결과를 확인해서 ..
029 - [Oracle PL/SQL] Exceptions - User defined Error declare v_employee_id number:=1; begin update employees set salary=20000 where employee_id=v_employee_id; dbms_output.put_line(sql%rowcount); end; -------------------------------------- # 조건에 맞는 데이터가 없으므로 업데이트 되는 데이터는 없다. # 그래서 적용된 row 개수는 0 이다. 0 # 에러는 아니지만 조건에 맞는 데이터가 없는 경우 에러를 발생시키는 샘플 declare v_employee_id number:=1; e_invalid_no exception; begin update employees set salary=20000 where emplo..
028 - [Oracle PL/SQL] Exceptions - Non predefined error # 오류 상황을 만들어서 해당 오류 코드를 확인한다. begin insert into departments(DEPARTMENT_ID ,DEPARTMENT_NAME) values (1,null ); end; ---------------------------------------------- ORA-01400: cannot insert NULL into ("HR"."DEPARTMENTS"."DEPARTMENT_NAME") ORA-06512: at line 2 01400. 00000 - "cannot insert NULL into (%s)" *Cause: An attempt was made to insert NULL into previously listed objects. *Action: These objec..
027 - [Oracle PL/SQL] Exceptions - common mistakes 샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다. Exceptions 사용시 흔한 실수 1. for 같은 반복문과 예외처리 할 경우, 예외처리후에 반복문을 계속 처리해야 한다면 아래 코드같은 구조를 조심해야 한다. # 반복할 for 문이 있음에도 불구하고 예외처리 후 구문이 종료되는 잘못된 경우의 예시 코드. declare v_first_name employees.first_name%type; begin for i in 99..102 loop select first_name into v_first_name from employees where employee_id=i; dbms_output.put_line(i||' ' ||v_first_name); end ..
026 - [Oracle PL/SQL] Exceptions PL/SQL Basic structure Handling Exceptions with PL/SQL # no exception case. declare v_first_name employees.first_name%type; begin select first_name into v_first_name from employees where employee_id=1; -- there is no emp_id=1 end; ------------------------------------------------- Error report - ORA-01403: no data found ORA-06512: at line 5 01403. 00000 - "no data found" *Cause: No data was found..
025 - [Oracle PL/SQL] Cursor - FOR UPDATE & CURRENT OF select * from employees where employee_id in (100,200) order by 1 for update; # 현재 상황에서는 employees 테이블은 잠김상태가 되므로 다른 업데이트 및 삭제 등, # 수정을 할 수 없다. commit; # commit 명령어가 실행될때까지 변경할 수 없다. for update 실행화면 for update 때문에 다른 세션에서 update 문이 완료되지 않는다 commit 실행 다른 세션에서 update 문이 완료된다 롤백을 통해서 원래대로 복구 DECLARE CURSOR c_emp_dept30 is SELECT employee_id, first_name,salary FROM employees where department_id=30 f..