본문 바로가기

Oracle

(45)
Oracle PL/SQL 프로시저 [데이터 타입 간 형 변환] 일부 데이터 타입의 경우 상호 데이터 타입 변환이 가능하다 가령 문자에서 숫자, 숫자에서 문자 ,문자에서 날짜 또는 날짜에서 문자 타입으로 변환이 가능하다. 형 변환 함수를 사용하여 명시적 으로 변환할 수 있으며 , 변경이 가능한 경우에 한해서 오라클에 의해 묵시적으로 자동 변환될 수도 있습니다. 그러나 가급적 올바른 데이터 타입을 선정하여 사용하도록 하고, 변환이 필요할 경우 명시적으로 선언하여, 개발자도 모르는 사이에 형 변환에 따른 문제가 발생하지 않도록 하는 것이 중요하다. DECLARE I_NUM_EMPNO NUMBER; I_VAR_EMPNO VARCHAR2(100); BEGIN --NUMBER형의 값을 VARCHAR2 형 변수에 입력 SELECT EMPNO INTO I_VAR_EMPNO FRO..
Oracle PL/SQL 프로시저[커서와FOR문] FOR 문은 커서와함께 또 다른 형태로 시용할수 있다. FOR 인덱스 IN [REVERS] 초기값..최종값 LOOP 처리문; END LOOP; 커서와 함께 사용될 경우 FOR 문 구문형식 FOR 레코드 IN 커서명(매게변수1.. ) LOOP 처리문; END LOOP; 해당커서의 패치가 끝나면 자동으로 LOOP 가 종료된다. 레코드는 테이블 로우 전체를 담아둘 수 있는 오라클 데이터 타입이다. DECLARE --커서선언 CURSOR cur_emp_dep (cp_department_id employees.department_id%TYPE) IS SELECT employee_name FROM employees WHERE department_id = cp_department_id BEGIN -- FOR 문을 통..
Oracle PL/SQL 프로시저 [ 커서] 커서란 특정 SQL 문장을 처리한 결과를 담고 있는 영역 (PRIVATE SQL 이라는 메모리 영역)을 가리키는 일종의 포인터로, 커서를 사용하면 처리된 SQL 문장의 결과 집합에 접근할 수 있다. SQL문은 집합적 언어이므로 임의의 SQL문이 처리된 결과의 로우수는 한개 이상이다. 커서의 종류에는 묵시적 커서와 명시적 커서가 있다. 묵시적 커서란 오라클 내부에서 자동으로 생성되어 사용하는 커서로 , PL/SQL 블록에서 실행하는 SQL 문장 (INSRT,UPDATE,MERGE,DELETE,SELECT INTO) 이 실행될 때마다 자동으로 만들어져 사용된다. 개발자 입장에서는 이러한 커서의 동작에 관여할 수는 없지만, 커서 속성을 이용하면 해당 커서에 대한 여러가지 정보를 얻어낼 수 있다. 반면 명시적 ..
Oracle PL/SQL 프로시저 [트랜잭션] 트랜잭션은 '거래' 라는 뜻으로 우리가 은행에서 입금과 출금을 하는 그 거래를 말한다. 일반 적인 프로그래밍 언어나 오라클에서 말하는 트랜잭션도 이 개념에서 차용한것이다. A란 은행에서 출금을 하여 B란 은행계죄에서는 돈이 빠져 나갔는데, 중간에 오류가 생겨서 B은행 계좌에 입금되지 않았다면 그렇다면 이 문제를 어덯게 처리 하면될까? 해결책은 거래 가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생햇을때는 이 거래를 아에 처음부터 없었던 거래로 되돌리는 것이다. 이렇게 하면 거래 도중에 발생하 오류에 대해 즉시 처리하지 못할지언정 최소한 금액손실은 발생하지 않는다. 거래 당사자 입장에서도 좀 귀찮기는 하지만 금액 손실이 발생하느니 다시 거래하는 것이 낫다. 이렇게 ..
Oracle PL/SQL 프로시저 [ 효율적인예외처리] 시스템 예외인 경우는 OTHERS 를 사용하자 미리 정의된 예외일 때는 예외명이 있어 EXCEPTION 절에 명시해 사용할수 있지만, 몇가지를 제외하고는 기억하기도 힘들고 사용하기가 번거롭다. 대신 OTHER는 모든 시스템 예외를 잡아내므로 OTHERS 와 SQLCODE, SQL ERRM을 적극 사용하자 예외처리 루틴을 모듈화 하고 발생된 예외 로그를 남기자 예외가 발생할때 SQLCODE나 SQLERRM 함수를 이용해 정확히 발생된 예외 정보를 상세히 알수 있다. 따라서 발생한 예외에 대한 로그 테이블을 만들어 예외가 생길 때마다 이 로그 테이블에 기록해 둔다면 관리하기 매우 편리할것이다. CREATE TABLE ERROR_LOG( ERROR_SEQ NUMBER, PROG_NAME VARCHAR2(80)..
Oracle PL/SQL[프로시저/예외처리] PL/SQL 코드를 작성할 떄 발생할 수 있는 오류에는 크게 두가지가 있다 하나는 문법 오류로써 객체 (테이블,뷰,함수,프로시저 등) 나 키워드 이름을 잘못 참조하거나 함수나 프로시저의 매개변수를 잘못 명시했을 때 발생되는 오류로, 이들은 컴파일할 때 걸러진다. 두 번째는 컴파일 때는 아무런 문제가 없으나 실행, 즉 런타임 때 로직을 처리하면서 발생하는 오류인데 이를 예외라고 한다. EXCEPTION WHEN 예외명1 THEN 예외처리 구문2 WHEN 예외명2 THEN 예외처리 구문2 WHEN OTHERS THEN 예외처리구문; 구문을 보면 CASE 문과 비슷한 구조임을 알 수 있다. 즉 처리할 예외명을 언급하고 그예외에 해당되면 예외처리 구문을 나열하는 식이다. WHEN 다음에 위치하는 예외명은 아무 ..
Oracle PL/SQL[프로시저] 함수는 특정 연산을 수행한뒤 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값을 반환하지는 않는 서브 프로그램이다. 일반적으로 프로젝트 현장에서는 시스템 설계가 끝난후 업무를 분할하고 이 분할한 업무 단위로 로직을 구현해야 하는데 개별적인 단위 업무는 주로 프로시저를 구현해 처리한다. 즉 테이블에서 데이터를 추출해 입맛에 맞게 조작하고 그결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할때 주로 프로시저를 사용한다. CREATE OR REPLACE PROCEDURE 프로시저 이름 (매게변수1[IN|OUT| IN OUT] 데이터 타입 [ := 디폴트 값], 매개변수2[IN|OUT| IN OUT] 데이터 타입 [ := 디폴트 값], ..) IS [AS] 변수 ,상수 등 선언..
Oracle(PL/SQL) 구성요소 변수는 다른 프로그래밍 언어에서 사용하는 변수와 개념이 같으며 선언부에서 변수 선언을 하고 실행부에서 사용한다. 변수 선언 방식은 다음과 같다. 변수명 데이터타입 := 초깃값; 변수 선언과 동시에 초깃값을 할당할수 있는데, 초깃값을 할당하지 않으면 데이터 타입과 상관없이 NULL 이된다. 변수로 선언할 수 있는 테이터 타입은 크게 두가지로 구분할 수 있는데, 하나는 SQL 데이터 타입이고 다른 하나는 PL/SQL 데이터 타입이다. 사실 이 두가지를 엄격히 구분하지는 않는다. 왜냐하면 PL/SQL 데이터 타입에는 SQL 데이터 타입이 포함되어 있기 때문이다. PL/SQL 데이터 타입인 BOOLEAN, PLS_INTEGER,BINARY_INTEGER 등에 대해 알아 보자. BOOLEAN 타입은 어떤 값이 참..