ch5. Advanced SQL

Sieun·2023년 2월 4일
0

데이터베이스

목록 보기
7/7
post-thumbnail

5.1 프로그래밍 언어에서 SQL의 접근

🔹 SQL로는 모든 질의를 다 표현할수 없기 때문에 더욱 강력한 언어에 SQL을 내장할 수 있음.
🔹 사용자와의 의사소통이 있어야 하거나 질의의 결과를 GUI에 전달해야 하는 경우, SQL로는 지원할 수 없어 범용 프로그래밍 언어와 SQL을 결합해서 사용해야 함.

범용 프로그래밍 언어에서 SQL에 접근하기 위한 2가지 접근 방법

🔹 동적 SQL(Dynamic SQL): 범용 프로그램은 함수나 메소드를 사용해서 DB 서버에 접속하고 통신할 수 있음. 동적 SQL은 프로그램이 런타임에 문자열로 SQL 질의를 만들어 제출하고, 한 번에 하나의 튜플씩 프로그램 변수로 결과를 가져올 수 있도록 함. SQL의 동적 SQL 요소는 프로그램이 실행 시간에 SQL 질의를 구성하고 완료할 수 있도록 함.
ㅤㅤ🔸JDBC: 자바를 위한 API(응용 프로그램 인터페이스)
ㅤㅤ🔸ODBC: C, C++, C#, Visual Basic 지원을 위해 확장된 API
ㅤㅤ➡️ DB 서버에 접속하고 통신하기 위한 API
ㅤㅤ➡️ 다른 DBMS에서 통용될 수 있는 표준
ㅤㅤ➡️ query문과 갱신문을 전송하고 결과를 반환받음.

🔹 내장 SQL(Embedded SQL): 내장 SQL에서 SQL 구문은 전처리기를 사용해서 컴파일 시 확인됨. 전처리기는 선컴파일과 최적화를 위해 DB 시스템에 SQL 구문을 전달함. 프로그램 언어의 컴파일러를 호출하기 전 응용 프로그램에 있는 SQL 구문을 적당한 코드와 함수 호출로 바꿈.

5.1.1 Dynamic SQL

5.1.1.1 JDBC

🔹 JDBC: Java 프로그램이 DB에 접속할 수 있는 API
🔹 DB 접근 방법
ㅤㅤ1단계: get connection - 접속 열기
ㅤㅤ2단계: Statement 객체 생성 - DB 시스템으로 SQL 구문 전달
ㅤㅤ3단계: Execute query - statement 객체를 이용해서 query를 실행하고 결과를 가져옴
ㅤㅤ4단계: exception - 에러 발생 시 예외 처리

5.1.1.2 ODBC

🔹 ODBC: C, C++, C#, Visual Basic 지원을 위해 확장된 API
🔹 ODBC를 지원하는 DB 시스템은 각각 클라이언트 프로그램에 link되어야 하는 라이브러리를 제공함. 클라이언트가 ODBC API를 호출하면 라이브러리에 있는 코드는 요청 동작을 수행하고 결과를 얻어오기 위해 서버와 통신함.
🔹 ODBC를 이용한 서버와의 통신 방법
ㅤㅤ1단계: database connection handle - 접속 열기
ㅤㅤ2단계: SQLConnect() - 접속 핸들, 연결할 서버, 사용자 식별자, 암호 전달
ㅤㅤ3단계: SQLExecDirect - SQL 명령어를 DB에 전달
ㅤㅤ4단계: SQLFetch

5.1.2 Embedded SQL

🔹 JDBC(ODBC)와의 차이점
내장 SQL 프로그램은 컴파일 전 전처리기를 통해 우선 처리 되어야 함.
➡️ 이 전처리기는 내장 SQL 요청을 실행 시간에 DB에 접근할 수 있는 호스트 언어로 된 선언과 프로시저 호출로 대체됨.
➡️ 그 후에 결과로 나온 프로그램을 호스트 언어의 컴파일러로 컴파일함.

EXEC SQL <embedded SQL statement > END-EXEC

🔹 내장 SQL 사용을 위해서는 declare cursor 문을 사용함.

declare c cursor for <SQL query>
< credit_amount => 호스트 언어 변수
credit_amount 이수 시간 이상을 수강한 모든 학생의 이름을 구하여라.>

EXEC SQL
declare c cursor for 
select ID, name
from student
where tot_cred > :credit_amount;

< query를 실행하기 위해서 커서 c를 open >
EXEC SQL open c;

< 튜플의 값을 호스트 언어 변수에 할당 >
EXEC SQL fetch c into :si, :sn;

< query의 결과를 유지하고 있는 임시 릴레이션을 DB 시스템이 삭제할 수 있도록 close >
EXEC SQL close c;

< DB update, insert, delete > - 결과 리턴 X
< 예시 : 음악과에 있는 모든 교수의 salary에 100을 더하라 >
EXEC SQL
declare c cursor for
select *
from instructor
where dept_name = ‘Music’
for update

5.2 Function & Procedure

5.3 Triggers

🔹 트리거: DB 수정에 대한 부수 효과로 시스템이 자동적으로 수행하는 문장
🔹 트리거 설계 요건
1) 트리거 실행 시점 명시 - 트리거가 검사되어야 하는 사건이나 만족되어야 하는 조건
2) 트리거 실행 시 수행되어야 할 동작 명시

🔹 트리거가 필요한 이유: SQL의 제약조건 방법을 사용해 명시될 수 없는 무결성 제약조건을 구현하기 위해 사용함.

profile
AI/ML 공부중👩🏻‍💻

0개의 댓글