000 | 00000cam c2200205 c 4500 | |
001 | 000046105479 | |
005 | 20220121140356 | |
007 | ta | |
008 | 220121s2021 ulka 001c kor | |
020 | ▼a 9791196395780 ▼g 93000 | |
035 | ▼a (KERIS)BIB000015843443 | |
040 | ▼a 211040 ▼c 211040 ▼d 211009 | |
082 | 0 0 | ▼a 005.7565 ▼2 23 |
085 | ▼a 005.7565 ▼2 DDCK | |
090 | ▼a 005.7565 ▼b 2021z7 | |
100 | 1 | ▼a 정희락 |
245 | 1 0 | ▼a 불친절한 PL/SQL 프로그래밍 : ▼b 기본 개념에서 고급 기능까지 : ▼b 오라클 PL/SQL의 바이블 / ▼d 정희락 지음 |
260 | ▼a 서울 : ▼b 디비안, ▼c 2021 | |
300 | ▼a xxix, 880 p. : ▼b 삽화 ; ▼c 25 cm | |
500 | ▼a PL/SQL = ▼x Procedural Language for Structured Query Language | |
500 | ▼a 부록: 1. 오라클 데이터베이스 설치, 2. SCOTT 스키마, 3. 오브젝트 타입명 외 | |
504 | ▼a 참고문헌(xxviii-xxxix)과 색인수록 | |
945 | ▼a KLPA |
소장정보
No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
---|---|---|---|---|---|---|---|
No. 1 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.7565 2021z7 | 등록번호 121258814 | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
컨텐츠정보
책소개
'불친절한 SQL 프로그래밍'에 이은 두 번째 오라클 프로그래밍 바이블 시리즈다. 전작과 마찬가지로 기본 개념에서 고급 기능까지 오라클 PL/SQL의 거의 모든 내용을 다루고 있다. 총 4부로 구성되어 있으며, 내용의 난이도와 연관성에 따라 1부 기본 개념, 2부 기초 문법, 3부 저장 유닛, 4부 고급 기능으로 내용을 구성했다. 부에 속한 장은 기능에 따라 순서를 배열했다. 장에서 다루기 어려운 내용은 부록에 수록했다. 찾아보기는 편의성을 위해 용어, 문법, 제공 패키지로 구분하여 정리했다.
오라클 데이터베이스 전문 개발자가 되려면 PL/SQL에 대한 지식이 반드시 필요하다. 첫 책인 "불친절한 SQL 프로그래밍"에서 SQL 개발에 활용할 수 있는 PL/SQL 코드를 다수 소개한 바 있다. 이 책은 첫 책의 연장선상에서 집필했다. 오라클 PL/SQL의 거의 모든 내용을 다루며 다양한 실습 예제와 활용 기법을 중심으로 내용을 구성했다.
오라클 데이터베이스가 버전업될 때마다 SQL과 PL/SQL을 통합하는 기능이 추가되고 있다. 특히 18.3 버전에 추가된 다형성 테이블 함수(PTF)와 20.0 버전에 추가된 SQL 매크로(SQM)는 현재 SQL 개발의 패러다임을 바꿀 만한 중요한 기능이다. 새로운 기능이 추가되며 살펴볼 내용이 늘어나긴 했지만 PL/SQL은 기본적으로 배우기 쉬운 프로그래밍 언어다. 배우는 노력에 비해 얻을 수 있는 효과가 매우 크다.
PL/SQL도 SQL처럼 학습이 불필요한 언어로 인식되는 경향이 있다. 이로 인한 이해의 부족으로 PL/SQL을 과용하거나 배제하는 경우를 자주 접한다. SQL로 개발해도 될 프로그램을 PL/SQL로 개발하거나 PL/SQL로 개발할 수 있는 프로그램을 JAVA로 개발하는 경우도 흔하다. 기술을 어떻게 사용하는지도 중요하지만 언제 어디에 사용하는지도 매우 중요하다.
오라클 데이터베이스의 구루인 토마스 카이트(Tom Kyte)는 그의 저서인 Expert one-on-one Oracle에서 "You should do it in a single SQL statement if at all possible. If you cannot do it in a single SQL Statement, then do it in PL/SQL."라는 오라클 데이터베이스 프로그래밍의 개발 원칙을 제안했다. 가급적 하나의 SQL 문으로 개발하되 하나의 SQL 문으로 개발할 수 없다면 PL/SQL로 개발하라는 의미다.
필자는 오라클 데이터베이스 개발 시에는 항상 토마스 카이트의 원칙을 지키고 있다. 이 책으로 PL/SQL의 지식을 익히고 오라클 데이터베이스 프로그래밍의 개발 원칙에 따라 데이터베이스 소프트웨어를 개발한다면 여러분도 오라클 데이터베이스 전문 개발자로 성장할 수 있을 것이다. 이 책이 여러분의 성장에 도움을 줄 수 있는 든든한 안내자가 되었으면 좋겠다.
출판사 리뷰
"불친절한 PL/SQL 프로그래밍"은 "불친절한 SQL 프로그래밍"에 이은 두 번째 오라클 프로그래밍 바이블 시리즈다. 전작과 마찬가지로 기본 개념에서 고급 기능까지 오라클 PL/SQL의 거의 모든 내용을 다루고 있다.
이 책은 총 4부로 구성되어 있다. 내용의 난이도와 연관성에 따라 1부 기본 개념, 2부 기초 문법, 3부 저장 유닛, 4부 고급 기능으로 내용을 구성했다. 부에 속한 장은 기능에 따라 순서를 배열했다. 장에서 다루기 어려운 내용은 부록에 수록했다. 찾아보기는 편의성을 위해 용어, 문법, 제공 패키지로 구분하여 정리했다.
1부 기본 개념
개요, 구성 요소, 선언, 데이터 타입, 표현식, 제어문에 대한 내용을 수록하고 있다. 1부는 이후 내용을 위한 개론이다. 내용을 충분히 숙지해야 다음 과정을 진행할 수 있다. 특히 1장의 PL/SQL 블록 구조는 반드시 이해해야 한다. 2장 구성 요소, 4장 데이터 타입, 5장 표현식은 SQL과 유사하고, 6장 제어문은 다른 프로그래밍 언어와 유사하다. SQL 개발자라면 쉽게 이해할 수 있다.
2부 기초 문법
레코드, 컬렉션, 커서, DML 문, TCS 문, 예외에 대한 내용을 수록하고 있다. 7장 레코드와 8장 컬렉션은 복합 데이터 타입으로 이후 과정의 예제에 자주 사용된다. 9장 커서는 SELECT 문의 결과를 행 단위로 처리한다. 10장 DML 문, 11장 TCS 문은 기본적으로 SQL과 동일하지만 PL/SQL의 확장 기능을 사용할 수 있다. 12장 예외는 PL/SQL의 런타임 에러다. 이벤트 지향 모델 방식으로 예외를 처리할 수 있다.
3부 저장 유닛
프로시저, 함수, 패키지, 트리거, 권한 관리, 코드 관리에 대한 내용을 수록하고 있다. 13장 프로시저, 14장 함수, 15장 패키지, 16장 트리거는 데이터베이스에 저장되는 저장 유닛으로 PL/SQL 개발의 기본 단위다. 각각의 장에서 저장 유닛의 동작을 살펴본다. 저장 유닛은 세밀한 권한 관리가 가능하며 컴파일 파라미터로 컴파일 코드를 제어할 수 있다.
4부 고급 기능
동적 SQL, 테이블 함수, 객체 타입, 성능 관리, 확장 기능, 제공 패키지에 대한 내용을 수록하고 있다. 동적 SQL로 런타임 시점에 SQL 문을 변경하고, 테이블 함수로 테이블 형태로 결과를 조회하고, 개체 타입으로 OOP를 적용할 수 있다. 22장 성능 관리에서 다양한 성능 관리 도구를 살펴보고, 23장 확장 기능, 24장 제공 패키지에서 고급 개발에 필요한 다양한 패키지를 살펴본다.
다루지 않는 내용
이 책은 다른 프로그래밍 언어로 처리할 수 있는 PL/SQL 기능을 다루지 않는다. XML과 JSON은 SQL로 처리할 수 있다. 관련 제공 패키지인 DBMS_XML*, DBMS_JSON 패키지를 살펴보지 않는다. 통신과 관련된 기능은 다른 프로그래밍 언어를 통해 폴링(polling) 방식으로 구현하는 편이 바람직하다. 통신과 관련된 제공 패키지인 UTL_HTTP, UTL_SMTP, UTL_TCP 패키지 또한 살펴보지 않는다.
예제 스크립트
이 책은 예제 중심의 책이다. 수록된 예제는 모두 실습이 가능하며 개발에 활용할 수 있는 코드 조각(code snippet)이다. 이론을 살펴보고 예제를 실습한 후 설명으로 이해한 내용을 비교해보는 방식을 권장한다. 예제 스크립트는 DBian 포럼(www.dbian.net)에서 다운로드할 수 있다.
정보제공 :

저자소개
정희락(지은이)
現) 주식회사 디비안 수석 컨설턴트 前) 에프앤자산평가, 에프앤가이드, 비투엔 광운대학교에서 컴퓨터 공학을 전공했다. 2007년부터 에프앤가이드에서 데이터베이스 개발자로 근무했고, 자회사인 에프앤자산평가에서 TA 업무를 담당했다. 비투엔으로 이직한 2011년부터 데이터 컨설턴트로 일하기 시작했고, 현재는 디비안에서 수석 컨설턴트로 재직하고 있다. 대외적으로는 한국데이터산업진흥원에서 주관하는 국가공인 SQLP, DAP 자격검정 전문위원으로 활동하고 있다. 데이터베이스 기술, 시스템 최적화, 애플리케이션 개발에 관심이 많다. 틈틈이 DB 기술 블로그(hrjeong.tistory.com)를 운영하고 있으며, 저서로 "불친절한 SQL 프로그래밍"을 집필했다.

목차
서문 _ xviii 구성 _ xx 표기 방식 _ xxii 명명 규칙 _ xxiv 실습 환경 _ xxvi 참고 자료 _ xxviii 1부 기본 개념 _ 1 1. 소개 _ 3 1.1 역사 _ 4 1.2 특징 _ 5 1.3 블록 구조 _ 6 1.3.1 익명 블록 _ 7 1.3.2 명명 블록 _ 7 1.3.3 중첩 블록 _ 9 1.4 처리 과정 _ 10 1.5 수행 과정 _ 11 2. 구성 요소 _ 13 2.1 캐릭터 셋 _ 14 2.2 문법 단위 _ 15 2.2.1 구분자 _ 15 2.2.2 식별자 _ 16 2.2.3 리터럴 _ 20 2.2.4 프라그마 _ 25 2.2.5 주석 _ 26 3. 선언 _ 27 3.1 변수 _ 28 3.2 상수 _ 30 3.3 %TYPE 속성 _ 32 3.4 범위 _ 33 3.5 가시성 _ 34 4. 데이터 타입 _ 37 4.1 사전 정의 데이터 타입 _ 38 4.1.1 문자 타입 _ 38 4.1.2 숫자 타입 _ 41 4.1.3 날짜 타입 _ 45 4.1.4 이진 타입 _ 49 4.1.5 ROWID 타입 _ 49 4.1.6 불리언 타입 _ 50 4.2 사용자 정의 서브 타입 _ 50 4.2.1 제한 서브 타입 _ 50 4.2.2 무제한 서브 타입 _ 51 4.3 데이터 변환 _ 52 5. 표현식 _ 55 5.1 연산자 _ 56 5.1.1 산술 연산자 _ 56 5.1.2 결합 연산자 _ 58 5.1.3 비교 연산자 _ 59 5.1.4 논리 연산자 _ 62 5.1.5 연산자 우선순위 _ 64 5.2 SQL 함수 _ 65 5.3 시퀀스 _ 66 6. 제어문 _ 69 6.1 조건문 _ 69 6.1.1 IF 문 _ 69 6.1.2 CASE 문 _ 72 6.1.3 고려 사항 _ 75 6.2 반복문 _ 77 6.2.1 LOOP 문 _ 77 6.2.2 WHILE LOOP 문 _ 79 6.2.3 FOR LOOP 문 _ 81 6.2.4 레이블 _ 84 6.2.5 고려 사항 _ 85 6.3 순차문 _ 86 6.3.1 GOTO 문 _ 86 6.3.2 NULL 문 _ 87 2부 기초 문법 _ 89 7. 레코드 _ 91 7.1 선언 _ 92 7.1.1 레코드 타입 _ 92 7.1.2 %ROWTYPE 속성 _ 97 7.1.3 %TYPE 속성 _ 97 7.1.4 한정 표현식 _ 98 7.2 할당 _ 99 7.3 비교 _ 100 8. 컬렉션 _ 103 8.1 선언 _ 104 8.1.1 컬렉션 타입 _ 104 8.1.2 %TYPE 속성 _ 110 8.1.3 다차원 컬렉션 _ 110 8.1.4 한정 표현식 _ 113 8.2 할당 _ 114 8.2.1 MULTISET 연산자 _ 115 8.3 비교 _ 116 8.3.1 MULTISET 조건 _ 117 8.4 컬렉션 메소드 _ 118 8.5 조회 _ 126 8.6 컬렉션 함수 _ 127 8.7 TABLE 컬렉션 표현식 _ 133 9. 커서 _ 135 9.1 암시적 커서 _ 137 9.1.1 SELECT INTO 문 _ 137 9.1.2 CURSOR FOR LOOP 문 _ 142 9.2 명시적 커서 _ 145 9.2.1 선언 _ 145 9.2.2 조회 _ 147 9.3 커서 변수 _ 154 9.3.1 선언 _ 154 9.3.2 할당 _ 155 9.3.3 조회 _ 156 9.3.4 호스트 커서 변수 _ 159 9.3.5 고려 사항 _ 161 9.4 커서 표현식 _ 164 10. DML 문 _ 169 10.1 기본 구문 _ 170 10.1.1 INSERT 문 _ 170 10.1.2 UPDATE 문 _ 171 10.1.3 DELETE 문 _ 173 10.1.4 MERGE 문 _ 173 10.1.5 DML 에러 로깅 _ 176 10.2 RETURNING INTO 절 _ 179 10.2.1 INTO 절 _ 179 10.2.2 BULK COLLECT INTO 절 _ 183 10.3 FORALL 문 _ 184 10.3.1 기본 구문 _ 186 10.3.2 INDICES OF 절 _ 191 10.3.3 VALUES OF 절 _ 192 10.3.4 SAVE EXCEPTIONS 절 _ 193 11. TCS 문 _ 195 11.1 기본 구문 _ 196 11.1.1 COMMIT 문 _ 196 11.1.2 ROLLBACK 문 _ 199 11.1.3 SAVEPOINT 문 _ 200 11.1.4 SET TRANSACTION 문 _ 201 11.1.5 LOCK TABLE 문 _ 202 11.2 FOR UPDATE 절 _ 202 11.3 자율 트랜잭션 _ 206 12. 예외 _ 209 12.1 유형 _ 211 12.1.1 내부 정의 예외 _ 211 12.1.2 사전 정의 예외 _ 2013 12.1.3 사용자 정의 예외 _ 216 12.2 예외 발생 _ 218 12.2.1 RAISE 문 _ 218 12.2.2 RAISE_APPLICATION_ERROR 프로시저 _ 219 12.3 예외 전파 _ 221 12.4 DBMS_UTILITY 패키지 _ 222 12.5 UTL_CALL_STACK 패키지 _ 225 12.5.1 에러 스택 _ 226 12.5.2 백트레이스 _ 228 12.5.3 콜 스택 _ 229 12.6 활용 예제 _ 232 3부 저장 유닛 _ 237 13. 프로시저 _ 239 13.1 유형 _ 240 13.1.1 중첩 프로시저 _ 240 13.1.2 저장 프로시저 _ 242 13.2 파라미터 _ 243 13.2.1 방식 _ 245 13.2.2 NOCOPY 키워드 _ 250 12.2.3 인수 표기법 _ 252 12.2.4 기술 순서 _ 253 13.3 오버로딩 _ 254 13.4 전방 선언 _ 256 13.5 정보 조회 _ 257 13.6 고려 사항 _ 260 13.6.1 날짜 처리 _ 260 13.6.2 트랜잭션 처리 _ 261 14. 함수 _ 269 14.1 유형 _ 271 14.1.1 중첩 함수 _ 271 14.1.2 저장 함수 _ 273 14.2 파라미터 _ 277 14.3 오버로딩 _ 278 14.4 옵션 _ 279 14.4.1 DETERMINISTIC _ 279 14.4.2 RESULT_CACHE _ 282 14.4.3 PIPELINED _ 285 14.4.4 PARALLEL_ENABLE _ 286 13.5 정보 조회 _ 288 14.6 고려 사항 _ 288 14.6.1 문맥 전환 _ 288 14.6.2 Recursive Call _ 290 14.6.3 읽기 일관성 _ 292 14.6.4 자율 트랜잭션 _ 294 15. 패키지 _ 299 15.1 요소 _ 301 15.1.1 프로시저 _ 302 15.1.2 함수 _ 305 15.1.3 변수 _ 306 15.1.4 상수 _ 309 15.1.5 커서 _ 310 15.1.6 타입 _ 314 15.1.7 예외 _ 322 15.2 초기화 섹션 _ 323 15.3 SERIALLY_REUSABLE 프라그마 _ 324 15.4 DBMS_SESSION 패키지 _ 329 15.5 정보 조회 _ 335 15.6 활용 예제 _ 339 16. 트리거 _ 343 16.1 DML 트리거 _ 345 16.1.1 단순 DML 트리거 _ 345 16.1.2 INSTEAD OF DML 트리거 _ 364 16.1.3 복합 DML 트리거 _ 366 16.2 시스템 트리거 _ 370 16.2.1 데이터베이스 트리거 _ 371 16.2.2 스키마 트리거 _ 373 16.2.3 INSTEAD OF CREATE 트리거 _ 374 16.2.4 이벤트 속성 함수 _ 375 16.3 활용 예제 _ 394 17. 권한 관리 _ 407 17.1 오브젝트 권한 _ 408 17.2 AUTHID 속성 _ 410 17.2.1 정의자 권한 _ 411 17.2.2 호출자 권한 _ 415 17.2.3 권한 우선순위 _ 418 17.3 BEQUEATH 절 _ 420 17.3.1 관련 함수 _ 422 17.4 코드 기반 접근 제어 _ 423 17.5 권한 상속 _ 427 17.5.1 INHERIT PRIVILEGES 권한 _ 427 17.5.2 INHERIT REMOTE PRIVILEGES 권한 _ 430 17.6 ACCESSIBLE BY 절 _ 431 18. 코드 관리 _ 435 18.1 오브젝트 종속성 _ 435 18.1.1 종속성 _ 435 18.1.2 무효화 _ 438 18.1.3 UTL_RECOMP 패키지 _ 444 18.1.4 DBMS_UTILITY 패키지 _ 445 18.2 컴파일 파라미터 _ 446 18.2.1 PLSQL_OPTIMIZE_LEVEL 파라미터 _ 448 18.2.2 PLSQL_CODE_TYPE 파라미터 _ 451 18.2.3 PLSQL_DEBUG 파라미터 _ 452 18.2.4 PLSQL_WARNINGS 파라미터 _ 453 18.2.5 NLS_LENGTH_SEMANTICS 파라미터 _ 461 18.3 조건부 컴파일 _ 463 18.3.1 선택 지시어 _ 463 18.3.2 에러 지시어 _ 465 18.3.3 조회 지시어 _ 466 18.3.4 DBMS_DB_VERSION 패키지 _ 478 18.3.5 DBMS_PREPROCESSOR 패키지 _ 472 18.4 PL/Scope _ 474 18.5 소스 코드 래핑 _ 479 18.5.1 warp 명령어 _ 480 18.5.2 DBMS_DDL 패키지 _ 481 4부 고급 기능 _ 485 19. 동적 SQL _ 487 19.1 NDS 방식 _ 488 19.1.1 EXECUTE IMMEDIATE 문 _ 488 19.1.2 OPEN FOR, FETCH, CLOSE 문 _ 497 19.1.3 동적 조건 _ 499 19.1.4 리터럴 SQL _ 503 19.2 DBMS_SQL 패키지 _ 507 19.2.1 기본 예제 _ 507 19.2.2 배열 처리 _ 516 19.2.3 정보 조회 _ 521 19.2.4 커서 변환 _ 528 19.2.5 결과 반환 _ 530 19.2.6 패키지 타입 _ 535 20. 테이블 함수 _ 539 20.1 일반 테이블 함수 _ 540 20.2 파이프라인 테이블 함수 _ 541 20.2.1 기본 문법 _ 541 20.2.2 병렬 처리 _ 542 20.2.3 활용 예제 _ 546 20.3 다형성 테이블 함수 _ 552 20.3.1 기본 구조 _ 552 20.3.2 DBMS_TF 패키지 _ 556 20.4 SQL 매크로 _ 602 20.4.1 스칼라 방식 _ 602 20.4.2 테이블 방식 _ 604 21. 객체 타입 _ 611 21.1 기본 문법 _ 612 21.1.1 생성자 메소드 _ 613 21.1.2 멤버 메소드 _ 615 21.1.3 정적 메소드 _ 619 21.1.4 오버로딩 _ 620 21.1.5 상속 _ 622 21.1.6 오버라이딩 _ 629 21.1.7 할당 _ 630 21.1.8 정보 조회 _ 632 21.2 객체 저장 _ 633 21.2.1 관계형 테이블 방식 _ 633 21.2.2 객체 테이블 방식 _ 635 21.3 관리 구문 _ 640 21.3.1 ALTER TYPE 문 _ 641 21.3.2 DROP TYPE 문 _ 645 21.3.3 DROP TYPE BODY 문 _ 646 22. 성능 관리 _ 647 22.1 PL/SQL Profiler _ 649 22.2 PL/SQL Trace _ 652 22.3 PL/SQL Hierarchical Profiler _ 656 22.3.1 12.2 이하 버전 _ 656 22.3.2 18.3 이상 버전 _ 661 22.4 PL/SQL Code Coverage _ 664 22.5 SQL Trace _ 668 22.6 정보 설정 _ 671 23. 확장 기능 _ 675 23.1 컨텍스트 _ 676 23.2 파이프 _ 683 23.3 경고 _ 688 23.4 큐 _ 693 23.4.1 기본 예제 _ 693 23.4.2 메시지 알림 _ 697 23.5 전역 트랜잭션 _ 701 23.6 병렬 실행 _ 705 23.6.1 태스크 _ 706 23.6.2 청크 _ 707 23.6.3 실행 _ 714 23.6.4 객체 관리 _ 720 23.7 잡 _ 722 23.8 스케줄러 _ 731 23.8.1 프로그램 _ 732 23.8.2 스케줄 _ 737 23.8.3 잡 _ 743 24. 제공 패키지 _ 757 24.1 DBMS_ASSERT 패키지 _ 758 24.2 DBMS_CRYPTO 패키지 _ 761 24.2.1 암호화 _ 761 24.2.2 임의 값 _ 766 24.3 DBMS_LOB 패키지 _ 767 24.4 DBMS_METADATA 패키지 _ 776 24.4.1 기본 조회 _ 776 24.4.2 고급 조회 _ 779 24.5 DBMS_OUTPUT 패키지 _ 783 24.6 DBMS_RANDOM 패키지 _ 789 24.7 DBMS_SESSION 패키지 _ 790 24.8 DBMS_UTILITY 패키지 _ 792 24.8.1 시간 측정 _ 792 24.8.2 구문 처리 _ 793 24.8.3 이름 처리 _ 795 24.8.4 정보 조회 _ 799 24.9 OWA_OPT_LOCK 패키지 _ 802 24.10 UTL_FILE 패키지 _ 804 24.11 UTL_MATCH 패키지 _ 812 24.12 UTL_RAW 패키지 _ 814 부록 _ 817 A. 오라클 데이터베이스 설치 _ 819 B. SCOTT 스키마 _ 832 C. 오브젝트 타입명 _ 835 D. 디버깅 _ 836 E. 구분자 분리 값 _ 839 F. 칼럼 데이터 타입명 _ 844 G. SQL 함수 코드명 _ 845 H. ROWID 청크 _ 846 I. 사용자 정의 집계 함수 _ 848 J. 자바 저장 프로시저 _ 854 K. PL/SQL 선언 절 _ 857 L. 전용 임시 테이블 _ 859 찾아보기 _ 863 A. 용어 _ 865 B. 구문 _ 871 C. 제공 패키지 _ 875