개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

- CURSOR FOR LOOP

 

CURSOR FOR LOOP는 Explicit CURSOR안에 있는 모든 Row들을 처리합니다. 따라서 CURSOR의 FETCH문에서 모든 데이터를 다 처리하기 위해 %NOTFOUND속성을 이용해야 하는 경우에 사용하면 유용합니다. 이 CURSOR는 내부적으로 OPEN되고, FETCH되고 나서 CLOSE되기 때문에 DECLARE절에서 선언만 하고 사용하면 됩니다. CURSOR의 데이터를 읽어 올 변수를 선언할 필요가 없습니다.

 

 

 

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

- Explicit CURSOR의 Attribute

Implicit CURSOR 사용할 때와 마찬가지로 Explicit CURSOR에 대한 상태 정보를 구하는 4가지 Attribute가 있습니다. CURSOR명 뒤에 Attribute를 붙여서 씁니다

 

 

[예제13]  S_ITEM 테이블에서 주문번호를 입력받아 각 상품에 해당하는 주문액과 총금액을 출력하시오

 

 

 

 

 

 

 

 

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

[예제12] 주문번호를 입력받아 S_ITEM 테이블에서 해당되는 주문내역을 삭제하시오. 그리고 그 삭제결과에 따라 Message를 출력하면 다음과 같습니다.

2. OPEN 단계

OPEN cursor명; 

OPEN문은 참조되는 변수를 연결하고, SELECT문을 실행합니다. SELECT로 검색된 Row들을 Active Set이라고 부르며, FETCH 단계에서 사용할 수 있게 됩니다. CURSOR는 Active Set을 생성한 다음, 첫번째 Row에 Pointer를 위치시켜 가리키게 됩니다. CURSOR를 OPEN할 때 검색된 Row가 없어도 에러를 발생하지 않습니다. FETCH를 한 후에 CURSOR의 Attribute를 살펴서 알아볼 수 있습니다.

 

3. FETCH 단계

FETCH cursor명 INTO 변수1, 변수2,...; 

FETCH문은 CURSOR로부터 Pointer가 존재하는 Record의 값을 변수에 전달해 줍니다. 그리고, Pointer는 Active Set의 다음 Record로 이동합니다. CURSOR를 선언할 때 사용된 SELECT문장의 컬럼과 같은 개수, 같은 데이터 타입의 변수를 FETCH문의 INTO절에 기술합니다. FETCH문에서는 FETCH될 Record가 없는 경우에도 에러를 발생하지 않으므로 Record를 포함하고 있는지를 확인합니다.


4. CLOSE 단

 CLOSE cursor명; 

CLOSE문은 Record의 Active Set을 닫아 주고, 다시 새로운 Active Set을 만들어 OPEN할 수 있게 해줍니다.

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

- CURSOR란
Oracle Server는 SQL문을 실행하고 처리한 정보를 저장하기 위해 "Private SQL Area" 이라고 하는 작업영역을 이용합니다.

 

 

이 영역에 이름을 부여하고 저장된 정보를 처리할 수 있게 해주는데 이를 CURSOR라 합니다. CURSOR는 DML문과 SELECT문에 의해 내부적으로 선언되는 Implicit(묵시적인) CURSOR와 사용자가 선언하고 이름을 정의해서 사용되는 Explicit(명시적인) CURSOR가 있습니다. PL/SQL에서 SELECT문은 한 개의 Row만을 검색할 수 있기 때문에 하나 이상의 Row를 검색하기 위해서는 Explicit CURSOR를 사용하여야 합니다.

 

 

 CURSOR란
Implicit CURSOR의 경우는 PL/SQL Block의 BEGIN Section에 SQL문이 있으면 PL/SQL은 SQL 이라는 이름으로 Implicit CURSOR를 만들게 되는데 PL/SQL은 이 CURSOR를 자동으로 관리하며 가장 최근의 Implicit CURSOR의 결과를 알려주기 위하여 몇 가지 Attribute를 제공합니다.
PL/SQL문에서 이 Attribute를 Function처럼 사용할 수 있지만, SQL문에서는 사용할 수 없습니다. 이 Attribute는 DML문의 수행결과를 알아보는데 유용합니다  

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

- SQLCODE, SQLERRM

일반적인 Error처리를 위하여 Oracle에서 제공하는 함수인 SQLCODE, SQLERRM을 활용할 수 있습니다.

 

 

 

[예제10] User Defined EXCEPTION의 예제9에서 작성한 Procedure를 이용하여 데이터를 입력하되 단, 커미션을 30%로 지정하여 실행하시오.

 

 

 

[예제11] 예제 9에서 실행시에 해당 COMMISSION_PCT를 입력하지 않는 경우에도 프로그램이 정상적으로 수행되도록 User Defined EXCEPTION의 예제9에서 작성한 프로그램을 보완하면 다음과 같습니다.

 

앞의 예제7, 예제9번과 같이 PL/SQL에서의 SELECT~ INTO~문은 정확히 한 행의 데이터만 검색이 가능하고 여러 행의 데이터가 넘어오는 경우나 한 행의 데이터도 검색되지 않는 경우에는 에러가 발생합니다. 따라서 사용자가 검색하고자 하는 데이터가 여러 행인 경우에는 Explicit CURSOR를 사용하여야 하는데 다음 절에서 CURSOR의 활용을 알아보기로 합니다.

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

3. User Defined EXCEPTION

사용자 정의 EXCEPTION은 oracle server error는 아니고, 사용자가 정한 조건이 만족되지 않을 때, Error를 발생시키는 방법입니다. DECLARE Section에서 EXCEPTION명을 정의하고 BEGIN Section에서 RAISE문을 써서 에러를 발생시킵니다. 그리고 EXCEPTION Section에서 에러 처리문을 기술합니다.

 

 

 

 

 

 

[예제9] S_EMP 테이블에 새로운 사원을 입력하는 프로그램을 작성하면 다음과 같습니다.단, 사번은 일련번호로 부여할 수 있도록 값을 지정하고 이름, 직책, 급여, 커미션은 사용자가 입력합니다.

단, 급여를 600이하로 입력시에는 입력이 불가능하도록 처리합니다.

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

클래스만의 특징
 
변수 선언과 메모리 생성이 분리
Person brother;      //변수 선언
brother = new Person(); //메모리 생성
 
클래스내에 메서드 포함 가능
public class Person{
     public int sum(int a, int b){
          return int c = a+ b;
     }
}
 
접근 지정의 개념 적용
public class Person extends Object{
    private int age = 20;  //접근 지정자 사용
}

상속의 개념 포함

public class Person extends Object{
     ….
}

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

클래스와 인스턴스 예제(2)
 
class Top{
 public int a; //필드
 public int b;
 public int sum(int x, int y) {
  return x + y;
 }
}
public class TopMain {
 public static void main(String[] args){
  Top t = new Top(); // Top 객체 생성
  t.a = 100; // 멤버 변수 a에 값 할당
  t.b = 200;
  int s = t.sum(3, 5); // sum() 메서드 호출한 후 리턴값을 s로 값복사
  
  //Top t의 멤버 변수 출력
  System.out.println("a는:" + t.a);
  System.out.println("b는:" + t.b);
  //메서드 호출 결과 출력
  System.out.println("t.sum(3,5)의 결과는:" + t.sum(3,5));
  System.out.println("s는:" + s);
 }
}

 

+ Recent posts