불친절한 PL/SQL 프로그래밍 (기본 개념에서 고급 기능까지 오라클 PL/SQL의 바이블)

불친절한 PL/SQL 프로그래밍 (기본 개념에서 고급 기능까지 오라클 PL/SQL의 바이블)

$44.03
Description
오라클 데이터베이스 전문 개발자가 되려면 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의 지식을 익히고 오라클 데이터베이스 프로그래밍의 개발 원칙에 따라 데이터베이스 소프트웨어를 개발한다면 여러분도 오라클 데이터베이스 전문 개발자로 성장할 수 있을 것이다. 이 책이 여러분의 성장에 도움을 줄 수 있는 든든한 안내자가 되었으면 좋겠다.
저자

정희락

광운대학교에서컴퓨터공학을전공했다.2007년부터에프앤가이드에서데이터개발자로일했고자회사인에프앤자산평가에서인프라구축을담당했다.비투엔으로이직한2011년부터데이터컨설턴트로일하고있고현재는디비안에서수석컨설턴트로재직하고있다.대외적으로는한국데이터산업진흥원에서주관하는국가공인SQLP,DAP자격검정전문위원으로활동하고있다.데이터베이스기술,시스템최적화,애플리케이션개발에관심이많다.틈틈이DB기술블로그(hrjeong.tistory.com)를운영하고있다.

목차

서문_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.5ROWID타입_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.2SQL함수_65
5.3시퀀스_66

6.제어문_69
6.1조건문_69
6.1.1IF문_69
6.1.2CASE문_72
6.1.3고려사항_75
6.2반복문_77
6.2.1LOOP문_77
6.2.2WHILELOOP문_79
6.2.3FORLOOP문_81
6.2.4레이블_84
6.2.5고려사항_85
6.3순차문_86
6.3.1GOTO문_86
6.3.2NULL문_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.1MULTISET연산자_115
8.3비교_116
8.3.1MULTISET조건_117
8.4컬렉션메소드_118
8.5조회_126
8.6컬렉션함수_127
8.7TABLE컬렉션표현식_133

9.커서_135
9.1암시적커서_137
9.1.1SELECTINTO문_137
9.1.2CURSORFORLOOP문_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.1INSERT문_170
10.1.2UPDATE문_171
10.1.3DELETE문_173
10.1.4MERGE문_173
10.1.5DML에러로깅_176
10.2RETURNINGINTO절_179
10.2.1INTO절_179
10.2.2BULKCOLLECTINTO절_183
10.3FORALL문_184
10.3.1기본구문_186
10.3.2INDICESOF절_191
10.3.3VALUESOF절_192
10.3.4SAVEEXCEPTIONS절_193

11.TCS문_195
11.1기본구문_196
11.1.1COMMIT문_196
11.1.2ROLLBACK문_199
11.1.3SAVEPOINT문_200
11.1.4SETTRANSACTION문_201
11.1.5LOCKTABLE문_202
11.2FORUPDATE절_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.1RAISE문_218
12.2.2RAISE_APPLICATION_ERROR프로시저_219
12.3예외전파_221
12.4DBMS_UTILITY패키지_222
12.5UTL_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.2NOCOPY키워드_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.1DETERMINISTIC_279
14.4.2RESULT_CACHE_282
14.4.3PIPELINED_285
14.4.4PARALLEL_ENABLE_286
13.5정보조회_288
14.6고려사항_288
14.6.1문맥전환_288
14.6.2RecursiveCall_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.3SERIALLY_REUSABLE프라그마_324
15.4DBMS_SESSION패키지_329
15.5정보조회_335
15.6활용예제_339

16.트리거_343
16.1DML트리거_345
16.1.1단순DML트리거_345
16.1.2INSTEADOFDML트리거_364
16.1.3복합DML트리거_366
16.2시스템트리거_370
16.2.1데이터베이스트리거_371
16.2.2스키마트리거_373
16.2.3INSTEADOFCREATE트리거_374
16.2.4이벤트속성함수_375
16.3활용예제_394

17.권한관리_407
17.1오브젝트권한_408
17.2AUTHID속성_410
17.2.1정의자권한_411
17.2.2호출자권한_415
17.2.3권한우선순위_418
17.3BEQUEATH절_420
17.3.1관련함수_422
17.4코드기반접근제어_423
17.5권한상속_427
17.5.1INHERITPRIVILEGES권한_427
17.5.2INHERITREMOTEPRIVILEGES권한_430
17.6ACCESSIBLEBY절_431

18.코드관리_435
18.1오브젝트종속성_435
18.1.1종속성_435
18.1.2무효화_438
18.1.3UTL_RECOMP패키지_444
18.1.4DBMS_UTILITY패키지_445
18.2컴파일파라미터_446
18.2.1PLSQL_OPTIMIZE_LEVEL파라미터_448
18.2.2PLSQL_CODE_TYPE파라미터_451
18.2.3PLSQL_DEBUG파라미터_452
18.2.4PLSQL_WARNINGS파라미터_453
18.2.5NLS_LENGTH_SEMANTICS파라미터_461
18.3조건부컴파일_463
18.3.1선택지시어_463
18.3.2에러지시어_465
18.3.3조회지시어_466
18.3.4DBMS_DB_VERSION패키지_478
18.3.5DBMS_PREPROCESSOR패키지_472
18.4PL/Scope_474
18.5소스코드래핑_479
18.5.1warp명령어_480
18.5.2DBMS_DDL패키지_481


4부고급기능_485
19.동적SQL_487
19.1NDS방식_488
19.1.1EXECUTEIMMEDIATE문_488
19.1.2OPENFOR,FETCH,CLOSE문_497
19.1.3동적조건_499
19.1.4리터럴SQL_503
19.2DBMS_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.2DBMS_TF패키지_556
20.4SQL매크로_602
20.4.1스칼라방식_602
20.4.2테이블방식_604

21.객체타입_611
21.1기본문법_612
21.1.1생성자메소드_613
21.1.2멤버메소드

출판사 서평

"불친절한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패키지또한살펴보지않는다.

예제스크립트
이책은예제중심의책이다.수록된예제는모두실습이가능하며개발에활용할수있는코드조각(codesnippet)이다.이론을살펴보고예제를실습한후설명으로이해한내용을비교해보는방식을권장한다.예제스크립트는DBian포럼(www.dbian.net)에서다운로드할수있다.