본문 바로가기

분류 전체보기

(135)
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 프로시저[사용자 정의예외처리] 사용자 정의 예외를 명시적으로, 즉 의도적으로 발생시키기 위해서 'RAISE_사용자_정의_예외명" 을 사용했다. 또한 사용자 정의 예외명 대신 미리 정의된 예외명을 명시해서 사용할 수도 있다. 즉 사용자 정의 예외명을 선언하고 미리 정의된 예외코드를 연결하거나 사용자 정의 예외를 선언하지 않고 바로 미리 정의된 예외를 발생시킬 수도 있다. 예를 들어 매개변수로 정수를 받아 처리하는 프로시저가 있는데 반드시 양수만 입력받아 처리해야 한다면 다음과 같이 INVALID_NUMBER 예외를 발생시킬 수 있다. create or replace PROCEDURE RAISE_TEST( P_NUM NUMBER) IS BEGIN IF P_NUM
Oracle PL/SQL[프로시저/예외처리] PL/SQL 코드를 작성할 떄 발생할 수 있는 오류에는 크게 두가지가 있다 하나는 문법 오류로써 객체 (테이블,뷰,함수,프로시저 등) 나 키워드 이름을 잘못 참조하거나 함수나 프로시저의 매개변수를 잘못 명시했을 때 발생되는 오류로, 이들은 컴파일할 때 걸러진다. 두 번째는 컴파일 때는 아무런 문제가 없으나 실행, 즉 런타임 때 로직을 처리하면서 발생하는 오류인데 이를 예외라고 한다. EXCEPTION WHEN 예외명1 THEN 예외처리 구문2 WHEN 예외명2 THEN 예외처리 구문2 WHEN OTHERS THEN 예외처리구문; 구문을 보면 CASE 문과 비슷한 구조임을 알 수 있다. 즉 처리할 예외명을 언급하고 그예외에 해당되면 예외처리 구문을 나열하는 식이다. WHEN 다음에 위치하는 예외명은 아무 ..
Oracle PL/SQL[프로시저] [RETURN] RETURN 함수에서 사용한 RETURN문을 프로시저에서도 사용할수 있는데, 그 쓰임새와 처리 내용은 다르다. 함수에서는 일정한 연산을 수행하고 결과 값을 반환하는 역할을 했지만, 프로시저에서는 RETURN 문을 만나면 이후 로직을 처리하지 않고 수행을 종료 , 즉 프로시저를 빠져나가 버린다. 반복문에서 일정 조건에 따라 루프를 빠져나가기 위해 EXIT 를 사용하는 것과 유사하다. 예를 프로시저에서 세번째 매개변수인 최소 급여값은 반드시 1000이상이어야 하며 , 이보다 작은 값이 들어오면 INSERT 나 UPDATE를 수행하지 않아야 한다고 해보자 그렇다면 최소 급여값을 체크해서 1000보다 작으면 아무것도 처리하지 않아야 하는데, 이럴때 RETURN 문을 사용하면 편리하다. CREATE OR REPL..
Oracle PL/SQL[프로시저] 함수는 특정 연산을 수행한뒤 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값을 반환하지는 않는 서브 프로그램이다. 일반적으로 프로젝트 현장에서는 시스템 설계가 끝난후 업무를 분할하고 이 분할한 업무 단위로 로직을 구현해야 하는데 개별적인 단위 업무는 주로 프로시저를 구현해 처리한다. 즉 테이블에서 데이터를 추출해 입맛에 맞게 조작하고 그결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할때 주로 프로시저를 사용한다. CREATE OR REPLACE PROCEDURE 프로시저 이름 (매게변수1[IN|OUT| IN OUT] 데이터 타입 [ := 디폴트 값], 매개변수2[IN|OUT| IN OUT] 데이터 타입 [ := 디폴트 값], ..) IS [AS] 변수 ,상수 등 선언..
Oracle PL/SQL 의 사용자 정의함수 함수생성 SQL 함수는 오라클에서 제공하는 내장함수이고 여기에서 말하는 함수는 사용자가 직접 로직을 구현하는 사용자 정의 함수를 말한다. SQL 함수편에서 배웠듯이 함수란 매개변수를 받아 뭔가를 처리해 그 결과를 번환하는 데이터베이스 객체이며 사용자 정의 함수도 마찬가다. 오라클에서 제공하는 빌트인SQL 함수가 많긴 하지만, 프로젝트를 진행하다보면 프로젝트 성격에 맞게 다양한 함수를 직접 구현해 사용해야 할 때가 많다. 먼저 함수의 구문부터 살펴보자. CREATE OR REPLACE FUNCTION 함수이름(배개변수1,매개변수2) RETURN 데이터타입; IS[AS] 변수,상수 등 선언 BEGIN 실행부 RETURN 반환값; [EXCEPTION 예외 처리부] END [함수이름] CREATE OR REPL..
Oracle(PL/SQL) 제어문 절차적 언어인 PL/SQL 은 다른 프로그래밍 언어에서 제공하는 다양한 처리문들을 포함하는데 이를 통칭해 PL/SQL 제어문이라고 한다. IF 조건 THEN 조건 처리; IF IF조건 THEN 조건 처리1; ELSE 조건 처리2; END IF IF조건1 THEN 조건처리1; ELSEIF 조건2 THEN 조건 처리2; ELSE 조건처리N; END IF; IF 다음에 오는 조건값이 ,측 TRUE 이면 해당 조건 처리 문장이 실행된다. 조건 다음에는 THEN을 문장 맨 마지막에는 END IF를 명기해야한다 조건이 1개 이상이면 ELSE IF 가 아닌 ELSIF를 사용한다. DECLARE VN_NUM1 NUMBER := 1; VN_NUM2 NUMBER := 2; BEGIN IF VN_NUM1 >= VN_NUM2..