제 11 장
SQL 프로그래밍 기법들의 소개
2015.06
조완섭
충북대학교
8.1 DB 프로그래밍의 개요 8.2 내포된 SQL
8.3 함수 호출, SQL/CLI
8.4 저장 프로시저와 SQL/PSM 8.5 요약
목차
• 범용 프로그래밍 언어에서 DB를 접근하고 조작하기 위한 여러 기법들을 이해함
– 프로그래밍 기술 – 데이터베이스 기술
– 양자의 통합활용 기술 => 정보화의 근간
이 장의 목표
• 목적
– 응용 프로그램에서 데이터베이스 접근
– SQL : 대화식 인터페이스이지만 표현력에 한계가 있음 – SQL + 프로그래밍언어 => 데이터베이스 프로그래밍
데이터베이스 프로그래밍
SQL SQL
Java + SQL
DBMS
프로그래밍 언어
DB
DB 프로그래밍
DB DB
원격지 원격지
• 필요성
– 대화식 인터페이스 (SQL)는 쉽게 사용할 수 있으나 복잡한 연산을 구현하는데 한계가 있음
– 대부분의 복잡한 데이터베이스 연산은 응용 프로그램을 통해 통해 실행
– 오늘날, 웹 인터페이스를 이용하기 위해 웹 프로그래밍과 데이터베이스가 결합되는 추세임
데이터베이스 프로그래밍
• 내포된 SQL 방식(embedded SQL)
– 호스트 프로그래밍 언어 내에 SQL 명령어를 내포시키는 방법 – SQL 문장 앞에는 접두어를 붙여서 구분함
– SQLJ (Java + SQL)
• 라이브러리 함수 호출방식
– 데이터베이스 호출을 지원하는 응용 프로그래밍 인터페이스(API:
Application Programming Interface)를 활용하는 방식
– 데이터베이스 연결, 질의, 수정 등의 기능을 담당하는 함수들로 구성 – JDBC (Java Database Connectivity)
• 새로운 언어 개발방식
– SQL과 간단한 프로그래밍 명령문들로 새로운 언어를 제작하는 방식 – Oracle의 PL/SQL
데이터베이스 프로그래밍 방식
C언어 SQL
C컴파일러 DBMS
응용프로그램
• 임피던스 미스매치
– 데이터베이스 모델과 프로그래밍 언어 모델 사이의 근본적인 차이점
C 언어
변수의
데이터 타입
각 필드의 데이터 타입’
처리단위는 Set-at-a-time 처리단위는
record-at-a-time
호환성이 있는 타입으로
바인딩
데이터베이스 프로그래밍 방식
Java 언어
DBMS
레코드에 대한 포인터 필요
: 커서
1. 클라이언트 프로그램에서 데이터베이스 서버에 대한 연결 설정 서버의 위치 (URL)
user_name / passed
2. SQL 문장을 DBMS로 전달하고 결과를 받음
3. 데이터베이스 접근이 더 이상 필요할 필요가 없을 때 클라이언트 프로그램은 연결 종료
데이터베이스 프로그래밍의 동작 순서
Client Program
Internet
DBMS서버의 위치 (URL) DB
user_name / passed
SQL
질의결과 테이블
• 대부분 SQL 문장들은 COBOL, C, Java와 같은 범용 호스트 프로그래밍 언어에 내포될 수 있음
– Embedded SQL (ESQL) Preprocessor
• 내포된 SQL 문장은 EXEC SQL 와 END-EXEC (또는 세미콜론(;))에 의해 호스트 프로그래밍 언어 문장과 구분됨
– 공유 변수들은 SQL 문장 내에서 사용될 때는 콜론(:)을 그 앞에 붙임 – ESQL Preprocessor는 컴파일러와 DBMS가 각자의 명령어를
분담하여 처리하도록 조정함
내포된 SQL 방식
C 언어 문장
EXEC SQL
SQL 문장들 END-EXEC
C 언어 문장
…
DBMS
컴파일러
• 데이터베이스 연결을 위한 SQL 명령문
– 연결(Connection)
• 특정 싯점에서 다중연결은 불가능하며 한개의 연결만 활성화
CONNECT TO server-name AS connection-name AUTHORIZATION user-account-info;
– 현재 활성화된 연결을 다른 것으로 변경가능
SET CONNECTION connection-name;
– 해제(Disconnection)
DISCONNECT connection-name;
내포된 SQL 방식
loop = 1;
while (loop) {
prompt (“Enter SSN: “, ssn);
EXEC SQL
select FNAME, LNAME, ADDRESS, SALARY into :fname, :lname, :address, :salary from EMPLOYEE where SSN == :ssn;
if (SQLCODE == 0) printf(fname, …);
else printf(“SSN does not exist: “, ssn);
prompt(“More SSN? (1=yes, 0=no): “, loop);
}
내포된 SQL C 프로그래밍 예
C언어 변수들은 SQL 안에서
“:”을 접두어를 붙여 사용됨
• 커서(반복자)는 여러 튜플들을 처리하기 위해 필요 - 튜플에 대한 포인터 기능
• FETCH 명령어는 다음 튜플로 커서를 이동할 때 사용
• CLOSE CURSOR는 질의 결과에 대한 처리를 종료했음을 나타냄
내포된 SQL C 프로그래밍 예
Cursor (포인터변수)
Fetch
질의 결과
SQL
Close Cursor
Emp
Fetch()
커서 개념 - 포인터
질의결과
• 동적 SQL
– 내포된 SQL 의 한계
• Sql이 프로그램 소스코드 안에 기록되어 있어 sql 문장을 변경하여 수행하려면 소스코드를 고쳐야 함
• 정적 데이터베이스 프로그래밍 방식 – 동적 SQL 의 목적
• 실행 시간에 새로운 SQL 문장을 변경하면서 수행하는 방식
• 프로그램은 실행 시에 키보드로부터 SQL 문장을 작성하여 입력하여 매번 실행되는 SQL 문을 변경할 수 있음
내포된 SQL 방식
• 동적 수정문(update)을 포함하는 것은 비교적 간단하지만 동적 질의는 복잡함
– 검색 결과의 구조 ( 애트리뷰트의 타입과 개수)를 프로그램의 컴파일 시간을 알 수 없으므로 다양하게 리턴되는 결과를 받을 수 있도록 준비하는 일이 어려움
예: 동적 수정문 (Upadate)의 사용 예제 EXEC SQL BEGIN DECLARE SECTION;
varchar
sqlupdatestring[256];
EXEC SQL END DECLARE SECTION;
…
prompt (“Enter update command:“, sqlupdatestring);
EXEC SQL PREPARE sqlcommand FROM :sqlupdatestring;
EXEC SQL EXECUTE sqlcommand;
내포된 SQL 방식 : 동적 SQL 예제
• 내포된 SQL 방식 : SQLJ
– Java 프로그램 안에서 SQL을 내포하는 표준
– SQLJ는 SQL 문장을 Java로 변환하고, 이는 다시 JDBC 인터페이스를 통해 실행되는 과정을 거침
– 필요한 클래스 라이브러리(예; java.sql)를 가져오는 것이 필요함
내포된 SQL 방식
Java SQL
J D B C
DB
• 라이버러시 함수호출 방식
– 데이터베이스를 접근하기 위해 응용 프로그래밍 인터페이스(API:
Application Programming Interface)라고 알려진 라이브러리 함수를 이용하는 방식
– 하나의 응용 프로그램에서 다양한 유형의 DB를 접근할 수 있음
• 두가지 방식이 있음
– SQL/CLI (SQL Call Level Interface) : ODBC 기반 – JDBC (Java Database Connectivity)
• 많은 DBMS 회사들이 자사의 JDBC 드라이버 (APIs)를 제공함
라이버러리 함수호출 방식
• JDBC 프로그래밍 절차
– Java class library “java.sql.*”를 import – JDBC 드라이버를 로드
– Java 프로그램에 필요한 변수들을 생성한다.
– 연결객체를 생성한다.
– 문장객체를 생성한다.
– 문장매개변수 설정
라이버러리 함수호출 방식
연결객체 생성 : conn 원하는 DB를 연결함
r : 결과객체
next()
질의결과
JDBC 드라이버를 로드함 JDBC 클래스 라이버러리를 import
문장객체 생성 : s
질의어 실행
• 저장 프로시저
– 데이터베이스 서버의 DBMS에 저장된 프로그램 모듈
– SQL/PSM (SQL/Persistent Stored Modules)이라는 SQL 확장을 사용함
– DB 서버에 한번 저장된 프로시저는 여러 응용에서 반복적으로 호출될 수 있으므로 응용 프로그램 생산성과 신뢰성 제고
– Assertions, Triggers 보다 더 복잡한 제약조건을 검사
저장 프로시저와 함수
인터넷
DBMS
SP1
Stored procedures sp1(a,b)
sp1(a,b)
응용 프로그램
• 저장 프로시저 생성
CREATE PROCEDURE procedure-name (params) local-declarations
procedure-body;
• 저장 함수
CREATE FUNCTION fun-name (params) RETRUNS return-type
local-declarations function-body;
• 프로시저나 함수 호출
CALL procedure-name/fun-name (arguments);
저장 프로시저와 함수
저장 프로시저와 함수
• 데이터베이스 프로그래밍 기법 소개
– 내포된 SQL 방식
– 라이버러리 함수 호출방식
– 데이터베이스 프로그래밍 방식
• 데이터베이스 프로그래밍은 정보화의 기본 기술임
– 프로그래밍 기술 – 데이터베이스 지식
– 양자를 결합하여 사용하는 기술