이미 소장하고 있다면 판매해 보세요.
|
PART I PL/SQL 시작하기 1
CHAPTER 1 예제로 시작하기 3 1.1 오라클 scott 예제 스키마 3 1.2 예제 프로그램 6 1.2.1 익명 PL/SQL 예제 6 1.2.2 저장 함수 예제 12 1.2.3 저장 프로시저 예제 15 CHAPTER 2 PL/SQL 개요 20 2.1 PL/SQL의 개념 21 2.2 PL/SQL의 주요 특징 22 2.3 PL/SQL과 SQL의 비교 25 2.4 PL/SQL로 쉽게 할 수 있는 것들과 하기 어려운 것들 27 2.4.1 쉽게 할 수 있는 것들 27 2.4.2 하기 어려운 것들 28 2.5 PL/SQL의 작성과 실행 절차 28 2.6 PL/SQL의 실행 구조 29 CHAPTER 3 PL/SQL 프로그래밍 준비하기 31 3.1 오라클의 세 가지 에디션 31 3.2 오라클 데이터베이스 설치 32 3.2.1 사용할 오라클 버전의 선택 32 3.2.2 오라클 데이터베이스 설치 절차 32 3.2.3 오라클 버전 12c 사용 시의 주의사항 34 3.3 PL/SQL 실행 환경 36 3.4 SQL*Plus 설정 38 PART II PL/SQL의 기초 39 CHAPTER 4 PL/SQL 프로그램의 기본 구조 41 4.1 블록 구조 41 4.2 문장 44 4.3 주석 45 4.4 저장 서브프로그램과 익명 PL/SQL 46 CHAPTER 5 구분자와 식별자 48 5.1 구분자 48 5.2 식별자 50 5.2.1 일반 사용자 정의 식별자 53 5.2.2 큰따옴표를 사용한 사용자 정의 식별자 54 5.3 식별자의 유효 범위 55 CHAPTER 6 데이터 타입 59 6.1 문자형 데이터 타입 60 6.2 수치형 SQL 데이터 타입 63 6.3 LONG과 LONG RAW 데이터 타입 65 6.4 PL/SQL 전용 데이터 타입 65 6.4.1 PL/SQL 전용 수치형 데이터 타입 65 6.4.2 BOOLEAN 데이터 타입 66 6.5 사용자 정의 서브타입 69 6.6 객체 타입 70 6.7 오라클 내장 데이터 타입의 최대 크기 차이 70 6.8 앵커(%)를 사용한 데이터 타입 지정 71 6.8.1 %TYPE 71 6.8.2 %ROWTYPE 72 6.9 스칼라 데이터 타입과 컴포지트 데이터 타입 73 CHAPTER 7 변수와 상수 그리고 리터럴 75 7.1 변수 75 7.2 상수 78 7.3 리터럴 79 7.3.1 문자형 리터럴 81 7.3.2 수치형 리터럴 84 7.3.3 날짜형 리터럴 86 CHAPTER 8 표현식 89 8.1 연산자와 피연산자 89 8.2 연산자 우선순위 90 8.3 연산자의 기능 설명 91 8.4 연산자의 종류 91 8.4.1 산술 연산자 92 8.4.2 논리 연산자 92 8.4.3 Short-Circuit Evaluation 94 8.4.4 연결 연산자 95 8.4.5 비교 연산자 95 8.4.6 BOOLEAN 표현식 101 8.4.7 CASE 표현식 102 8.5 PL/SQL에서 내장 SQL 함수의 사용 105 CHAPTER 9 SQL 실행 107 9.1 SELECT문의 사용 107 9.1.1 기본 사용법 107 9.1.2 PL/SQL 입력 변수의 사용 108 9.2 INSERT문의 사용 111 9.3 UPDATE문의 사용 113 9.4 MERGE문의 사용 115 9.5 DELETE문의 사용 117 9.6 시퀀스 사용 117 9.7 DML문의 결괏값을 PL/SQL 변수로 반환하는 방법 118 9.8 트랜잭션 제어 120 9.8.1 COMMIT 121 9.8.2 묵시적 COMMIT 122 9.8.3 ROLLBACK 123 9.8.4 SAVEPOINT 124 9.8.5 묵시적 ROLLBACK 126 9.8.6 SET TRANSACTION 128 9.9 CLOB 사용하기 129 PART III 절차형 데이터베이스 언어로서의 PL/SQL 133 CHAPTER 10 제어문 135 10.1 제어문의 종류 135 10.2 조건 분기문 136 10.2.1 IF문 136 10.2.2 CASE문 138 10.3 무조건 분기문 144 10.4 레이블 146 10.5 순환문 149 10.5.1 기본 LOOP문 149 10.5.2 탈출문 150 10.5.3 WHILE LOOP문 151 10.5.4 FOR LOOP문 152 10.5.5 LOOP문 내에서의 흐름 변경 156 10.6 제어 구조의 중첩 157 CHAPTER 11 컬렉션 160 11.1 컬렉션 타입의 종류 161 11.2 Associative Array 163 11.3 VARRAY(Variable-Size Array) 167 11.4 Nested Table 170 11.5 컬렉션 생성자 174 11.6 컬렉션 연산 175 11.6.1 컬렉션 변수 간의 할당 175 11.6.2 컬렉션 비교 177 11.6.3 컬렉션 메소드 178 11.7 다차원 컬렉션 180 11.8 배열 처리 180 11.8.1 SELECT문에서의 배열 처리 181 11.8.2 DML문에서의 배열 처리 185 11.8.3 FORALL문과 예외 처리 188 CHAPTER 12 레코드 191 12.1 레코드 사용 191 12.2 레코드를 SQL에 사용하기 193 12.3 레코드 변수에 값 할당 197 12.4 레코드와 컬렉션의 혼합 199 12.5 레코드를 SELECT, INSERT, UPDATE문에 사용할 때의 제약 사항 200 CHAPTER 13 커서 201 13.1 묵시적 커서와 명시적 커서 202 13.1.1 묵시적 커서 203 13.1.2 명시적 커서 203 13.2 커서 FOR LOOP 208 13.2.1 묵시적 커서 FOR LOOP 209 13.2.2 명시적 커서 FOR LOOP 211 13.3 커서 속성 211 13.3.1 명시적 커서 속성 212 13.3.2 묵시적 커서 속성 214 13.4 커서 칼럼의 앨리어스 사용 215 13.5 커서 매개변수 216 13.6 커서 변수(REF CURSOR) 217 13.7 SELECT FOR UPDATE 222 CHAPTER 14 동적 SQL 225 14.1 EXECUTE IMMEDIATE문을 사용하는 방법 227 14.1.1 쿼리 결과를 변수에 저장 228 14.1.2 바인드 변수의 사용 228 14.1.3 바인드 변수의 모드 229 14.1.4 바인드 변수 플레이스 홀더의 이름과 순서 230 14.2 커서 변수를 사용하는 방법 232 14.3 DBMS_SQL 내장 패키지를 사용하는 방법 233 14.4 동적 PL/SQL 238 CHAPTER 15 예외 처리 240 15.1 예외 처리 방법 240 15.2 예외의 이름 243 15.2.1 표준 예외명 243 15.2.2 사용자 정의 예외명 250 15.3 사용자가 예외를 발생시키기 251 15.3.1 RAISE문 사용 251 15.3.2 RAISE_APPLICATION_ERROR 252 15.4 예외를 특정 오류 번호와 연결하기 255 15.5 예외의 전파 256 15.6 예외 처리기에서의 오류 조회 함수 257 15.6.1 FORMAT_ERROR_BACKTRACE 258 15.6.2 FORMAT_ERROR_STACK 258 15.6.3 FORMAT_CALL_STACK 259 15.7 예외 처리에서 주로 하는 작업 261 15.7.1 트랜잭션 마무리 261 15.7.2 변수나 반환값 지정 262 15.7.3 디버깅 정보 출력 263 15.7.4 오류 무시 265 PART IV 저장 서브프로그램 267 CHAPTER 16 저장 서브프로그램 개요 269 16.1 저장 서브프로그램을 사용하는 이유 269 16.2 저장 서브프로그램의 종류 270 16.3 프로그램을 서버에 저장하고 공유하기 271 16.4 저장 서브프로그램의 컴파일과 실행 방법 272 16.4.1 컴파일하기 273 16.4.2 컴파일 오류 조회 274 16.4.3 저장 서브프로그램 실행하기 276 16.5 서버에 저장되지 않는 서브프로그램 279 CHAPTER 17 저장 함수 282 17.1 함수의 기본 구조 282 17.2 함수의 매개변수 284 17.3 함수의 선언부 285 17.4 함수의 반환값 286 17.5 저장 함수의 사용 289 17.6 저장 함수 사용의 제약 사항 289 CHAPTER 18 저장 프로시저 291 18.1 프로시저의 매개변수 293 18.2 프로시저의 선언부 293 18.3 저장 프로시저의 사용 293 CHAPTER 19 패키지 294 19.1 패키지 구조 294 19.2 패키지 변수 298 19.3 패키지 서브프로그램 304 19.4 패키지 커서 306 19.5 SERIALLY_REUSABLE 패키지 308 CHAPTER 20 서브프로그램의 다양한 기능들 311 20.1 매개변수 311 20.1.1 매개변수의 선언과 사용 311 20.1.2 IN/OUT 매개변수 312 20.1.3 매개변수의 기본값 314 20.1.4 매개변수의 값 지정 방법: 위치에 의한 지정과 이름에 의한 지정 315 20.1.5 OUT 매개변수 변경의 원자성 보장 316 20.1.6 매개변수의 전달 방식: 값에 의한 호출과 참조에 의한 호출 318 20.1.7 NOCOPY 매개변수 319 20.2 재귀 호출 321 20.3 서브프로그램 정의의 중첩 321 20.4 중복 정의 323 20.4.1 중복 정의의 사용 323 20.4.2 중복 정의의 제약 327 20.5 전방 선언 328 20.6 자치 트랜잭션 329 20.7 함수 속성 DETERMINISTIC, PARALLEL_ENABLE, RESULT_CACHE 332 20.7.1 DETERMINISTIC 333 20.7.2 PARALLEL_ENABLE 333 20.7.3 RESULT_CACHE 334 20.8 권한 모델: 정의자 권한과 실행자 권한 334 20.8.1 정의자 권한 337 20.8.2 실행자 권한 338 20.8.3 ROLE을 통해 부여 받은 권한: SQL은 실행되는데 서브프로그램에 포함시키면 오류 발생 340 CHAPTER 21 트리거 344 21.1 트리거의 종류 345 21.2 DML 트리거의 구조 346 21.3 트리거의 호출 순서 349 21.4 트리거의 제약 사항 350 CHAPTER 22 객체 타입 352 22.1 객체 타입 개념 352 22.2 객체 타입 속성 355 22.3 객체 타입의 메소드 355 22.3.1 멤버 메소드 356 22.3.2 정적 메소드 362 22.3.3 생성자 메소드 363 22.4 객체 타입의 상속 369 22.5 메소드의 재정의 370 22.6 메소드의 중복 정의 373 22.7 REF 데이터 타입 374 22.8 객체를 테이블에 저장하는 방법 379 22.9 슈퍼타입과 서브타입 간의 변환 381 22.10 객체 타입의 진화 384 22.10.1 메소드의 추가 또는 삭제 385 22.10.2 속성의 추가, 삭제, 변경 386 22.10.3 타입의 FINAL과 NOT FINAL의 변경 387 CHAPTER 23 저장 서브프로그램 관리 388 23.1 변경과 삭제 388 23.2 딕셔너리에서 저장 서브프로그램 조회하기 389 23.3 저장 서브프로그램 권한 관리 391 CHAPTER 24 외부 프로그램에서 저장 서브프로그램 호출 394 24.1 자바 프로그램에서 저장 서브프로그램 호출 395 24.1.1 자바에서 저장 함수 호출 396 24.1.2 자바에서 저장 프로시저 호출 398 24.2 C# 프로그램에서 저장 서브프로그램 호출 401 24.2.1 C#에서 오라클을 사용하기 위한 준비 402 24.2.2 C#에서 저장 함수 호출 405 24.2.3 C#에서 저장 프로시저 호출 409 CHAPTER 25 자바 저장 프로시저 412 25.1 자바 저장 프로시저의 작성 방법과 절차 413 25.1.1 자바 클래스 파일을 DB에 로드 415 25.1.2 자바 소스 파일을 DB에 로드 417 25.1.3 자바 소스를 DB에 직접 생성 418 25.2 오라클의 SQL 데이터 타입과 자바 타입 간의 매핑 419 25.3 자바 저장 프로시저에서 자신을 실행한 오라클에 접속하기 421 25.4 오라클에서 지원하지 않는 기능을 자바로 구현하기 426 |
|
안녕하세요 이 책의 저자입니다.
2017-07-05
오라클을 활용하는 프로그래밍에서 가장 중요한 데이터베이스 언어는 당연히 SQL이다. PL/SQL을 모른다고 오라클을 사용하지 못하는 것은 아니다. 하지만 PL/SQL을 안다면 SQL만 아는 사람보다는 오라클을 몇 배 더 잘 활용할 수 있다. SQL은 매우 강력한 언어지만, 데이터 처리 로직이 복잡해지면 SQL만으로 이를 구현하기는 어려워진다. PL/SQL은 SQL의 이런 약점을 보완할 수 있는 언어로, SQL로 구현하기 어려운 복잡한 절차적 처리를 데이터베이스 수준에서 쉽게 구현할 수 있게 해준다. PL/SQL을 사용하면 데이터베이스 응용 프로그램은 더 효율적이 되고, 훨씬 강력해진다.
PL/SQL은 3세대 프로그래밍 언어가 가진 핵심 기능을 대부분 가지고 있다. SQL문을 PL/SQL 언어의 일부인 것처럼 사용할 수 있는 것은 물론이고, IF문이나 CASE문이나 GOTO문과 같은 분기문, LOOP문이나 WHILE문이나 FOR문과 같은 순환문을 사용할 수 있다. 컬렉션과 레코드를 사용하여 데이터를 구조적으로 다룰 수 있고 예외 처리를 사용하여 오류를 스마트하게 처리할 수 있다. PL/SQL은 관계형 데이터베이스에 강력한 절차적 프로그래밍 언어를 긴밀하게 결합시켜 오라클 데이터베이스 프로그래밍의 효율을 극대화시킨다. 뭐니 뭐니 해도 PL/SQL의 꽃은 저장 서브프로그램이다. PL/SQL로 작성한 함수, 프로시저, 패키지, 트리거, 객체 타입과 같은 저장 서브프로그램은 데이터베이스 내부에 저장되고 실행될 수 있다. 저장 서브프로그램의 등장으로 오라클 데이터베이스는 데이터뿐만 아니라 데이터를 처리하기 위한 비즈니스 로직까지도 함께 저장할 수 있게 되었다. 저장 서브프로그램은 데이터 처리 로직의 재사용성과 표준화, 모듈화를 향상시키고 유지보수를 용이하게 하며, 처리 성능을 개선시킬 수 있게 한다. 또한 자바 저장 프로시저(Java Stored Procedure)는 강력한 자바 라이브러리를 활용하여 PL/SQL만으로는 처리하기 어려운 기능을 개발자들에게 보다 친숙한 언어인 자바로 작성할 수 있게 해 준다. 개발자에게 있어서 SQL은 공기나 물과 같은 자유재처럼 당연히 알아야 하는 기본 중의 기본 언어이지만, PL/SQL은 알면 부가가치가 붙는 희소재이다. PL/SQL을 사용할 줄 아는 개발자는 SQL만을 아는 개발자보다 더 좋은 무기를 가지고 있는 것이다. 이제 PL/SQL이라는 강력한 아이템을 갈고 닦아서 당신의 능력치를 극대화시켜 보도록 하자. |
|
그렇다고 해서 SQL이 만능인 것은 아니다. SQL만으로 업무 로직을 처리하기에는 너무 복잡하거나 심지어는 불가능한 경우도 있다. 실제 업무 처리 로직에는 절차적인 요소가 매우 많다. PL/SQL이 없던 시절에는 이런 절차적인 요소를 코볼(COBOL)과 같은 언어가 담당했다. 메인프레임에서 실행되는 코볼 프로그램에 데이터베이스와의 인터페이스를 위한 임베디드 SQL(Embedded SQL) 처리 기능을 추가하여 절차적인 업무들을 처리했다. 과거에는 대규모 비즈니스 업무 처리에 사용된 언어가 거의 코볼 일색이었기 때문에 어쩌면 이것이 자연스러웠을 것이다. _2p
데이터 타입의 지정 방법 중에서 특이하면서도 매우 유용한 형식이 있는데, 변수나 칼럼, 테이블, 커서 등의 기존 선언을 참조하여 데이터 타입을 지정하는 방법이다. 오라클에서 공식적으로 사용하는 용어는 아니지만, 보통 이를 앵커(Anchor)라고 부른다. 이 방법을 사용하면 식별자의 선언문이 간단해지고, 차후에 참조되는 타입이 변경되더라도 이를 참조하는 쪽은 소스 코드를 수정하지 않아도 된다는 장점이 있다. 앵커는 다음의 두 가지 형식으로 사용이 가능하다. _71p 트랜잭션은 세션별로 독립적으로 유지된다. 두 사람이 별도로 각자의 SQL*Plus를 사용하여 접속했다면 이는 서로 다른 세션이며(물론, 한 사람이 두 개의 SQL*Plus를 실행하는 경우도 마찬가지로 서로가 다른 세션이다), 따라서 둘은 별도의 독립적인 트랜잭션이다. 서로 다른 트랜잭션은 독립적이므로, 한 세션(트랜잭션)이 커밋을 하더라도 다른 세션(트랜잭션)의 변경 사항을 커밋하는 일은 없다. 이는 바로 다음에 설명할 롤백의 경우에도 마찬가지다. __122p PL/SQL은 절차형 데이터베이스 언어다. 절차형 언어로서 갖춰야 하는 기본적인 요소는 제어문이다. 절차적 처리를 효율적으로 실시할 수 있도록 지원되는 부가 기능에는 컬렉션과 레코드가 있다. 절차형 언어에서 데이터베이스와 상호 작용하기 위해서 커서가 기본적으로 지원되고, 정적 커서(Static Cursor)의 제약 사항을 보완하기 위해서 동적 SQL(Dynamic SQL)이 지원된다. 요즘 대부분의 언어는 절차 처리에서 예외 발생 시 이를 스마트하게 처리할 수 있도록 하는 예외 처리를 지원하는데, 오라클 PL/SQL 역시 예외 처리를 지원한다. _134p PL/SQL의 가장 큰 장점 중의 하나는 데이터 처리 로직을 데이터베이스에 저장할 수 있다는 것이다. 데이터베이스가 단순히 데이터만을 저장하는 것에서 나아가 데이터 처리를 위한 비즈니스 로직까지 저장할 수 있게 된 것이다. 기존 DBMS의 역할에서 상당히 진보한 것이라 할 수 있다. 데이터 처리 로직을 데이터베이스에 저장할 수 있으면 재사용성, 유지보수성, 모듈화, 표준화, 성능 등의 측면에서 여러 가지 장점이 생긴다. _268p 자바(Java)는 플랫폼 독립적인 언어로, 거의 모든 O/S에서 동작하기 때문에 기업 시스템을 구축하기 위해서 가장 많이 사용되는 언어다. 자바 언어에서는 데이터베이스를 지원하는 범용 클래스를 사용할 수도 있고, 각 DBMS 벤더가 제공하는 전용 클래스를 사용할 수도 있다. 오라클을 사용하여 시스템을 구축할 때는 오라클이 제공하는 전용 드라이버를 사용하는 경우가 대부분이므로 이 책에서도 오라클이 제공하는 JDBC 클래스를 사용하기로 한다. ---p.395 |