• 검색 결과가 없습니다.

제 11 장

N/A
N/A
Protected

Academic year: 2022

Share "제 11 장"

Copied!
23
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

제 11 장

SQL 프로그래밍 기법들의 소개

2015.06

조완섭

충북대학교

(2)

8.1 DB 프로그래밍의 개요 8.2 내포된 SQL

8.3 함수 호출, SQL/CLI

8.4 저장 프로시저와 SQL/PSM 8.5 요약

목차

(3)

범용 프로그래밍 언어에서 DB를 접근하고 조작하기 위한 여러 기법들을 이해함

– 프로그래밍 기술 – 데이터베이스 기술

– 양자의 통합활용 기술 => 정보화의 근간

이 장의 목표

(4)

목적

– 응용 프로그램에서 데이터베이스 접근

– SQL : 대화식 인터페이스이지만 표현력에 한계가 있음 – SQL + 프로그래밍언어 => 데이터베이스 프로그래밍

데이터베이스 프로그래밍

SQL SQL

Java + SQL

DBMS

프로그래밍 언어

DB

DB 프로그래밍

DB DB

원격지 원격지

(5)

필요성

– 대화식 인터페이스 (SQL)는 쉽게 사용할 수 있으나 복잡한 연산을 구현하는데 한계가 있음

– 대부분의 복잡한 데이터베이스 연산은 응용 프로그램을 통해 통해 실행

– 오늘날, 웹 인터페이스를 이용하기 위해 웹 프로그래밍과 데이터베이스가 결합되는 추세임

데이터베이스 프로그래밍

(6)

내포된 SQL 방식(embedded SQL)

– 호스트 프로그래밍 언어 내에 SQL 명령어를 내포시키는 방법 – SQL 문장 앞에는 접두어를 붙여서 구분함

– SQLJ (Java + SQL)

• 라이브러리 함수 호출방식

– 데이터베이스 호출을 지원하는 응용 프로그래밍 인터페이스(API:

Application Programming Interface)를 활용하는 방식

– 데이터베이스 연결, 질의, 수정 등의 기능을 담당하는 함수들로 구성 – JDBC (Java Database Connectivity)

• 새로운 언어 개발방식

– SQL과 간단한 프로그래밍 명령문들로 새로운 언어를 제작하는 방식 – Oracle의 PL/SQL

데이터베이스 프로그래밍 방식

C언어 SQL

C컴파일러 DBMS

응용프로그램

(7)

임피던스 미스매치

– 데이터베이스 모델과 프로그래밍 언어 모델 사이의 근본적인 차이점

C 언어

변수의

데이터 타입

각 필드의 데이터 타입’

처리단위는 Set-at-a-time 처리단위는

record-at-a-time

호환성이 있는 타입으로

바인딩

데이터베이스 프로그래밍 방식

Java 언어

DBMS

레코드에 대한 포인터 필요

: 커서

(8)

1. 클라이언트 프로그램에서 데이터베이스 서버에 대한 연결 설정 서버의 위치 (URL)

user_name / passed

2. SQL 문장을 DBMS로 전달하고 결과를 받음

3. 데이터베이스 접근이 더 이상 필요할 필요가 없을 때 클라이언트 프로그램은 연결 종료

데이터베이스 프로그래밍의 동작 순서

Client Program

Internet

DBMS

서버의 위치 (URL) DB

user_name / passed

SQL

질의결과 테이블

(9)

대부분 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

컴파일러

(10)

• 데이터베이스 연결을 위한 SQL 명령문

– 연결(Connection)

• 특정 싯점에서 다중연결은 불가능하며 한개의 연결만 활성화

CONNECT TO server-name AS connection-name AUTHORIZATION user-account-info;

– 현재 활성화된 연결을 다른 것으로 변경가능

SET CONNECTION connection-name;

– 해제(Disconnection)

DISCONNECT connection-name;

내포된 SQL 방식

(11)

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 안에서

“:”을 접두어를 붙여 사용됨

(12)

커서(반복자)는 여러 튜플들을 처리하기 위해 필요 - 튜플에 대한 포인터 기능

FETCH 명령어는 다음 튜플로 커서를 이동할 때 사용

CLOSE CURSOR는 질의 결과에 대한 처리를 종료했음을 나타냄

내포된 SQL C 프로그래밍 예

Cursor (포인터변수)

Fetch

질의 결과

SQL

Close Cursor

(13)

Emp

Fetch()

커서 개념 - 포인터

질의결과

(14)

동적 SQL

– 내포된 SQL 의 한계

• Sql이 프로그램 소스코드 안에 기록되어 있어 sql 문장을 변경하여 수행하려면 소스코드를 고쳐야 함

• 정적 데이터베이스 프로그래밍 방식 – 동적 SQL 의 목적

• 실행 시간에 새로운 SQL 문장을 변경하면서 수행하는 방식

• 프로그램은 실행 시에 키보드로부터 SQL 문장을 작성하여 입력하여 매번 실행되는 SQL 문을 변경할 수 있음

내포된 SQL 방식

(15)

동적 수정문(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 예제

(16)

내포된 SQL 방식 : SQLJ

– Java 프로그램 안에서 SQL을 내포하는 표준

– SQLJ는 SQL 문장을 Java로 변환하고, 이는 다시 JDBC 인터페이스를 통해 실행되는 과정을 거침

– 필요한 클래스 라이브러리(예; java.sql)를 가져오는 것이 필요함

내포된 SQL 방식

Java SQL

J D B C

DB

(17)

• 라이버러시 함수호출 방식

– 데이터베이스를 접근하기 위해 응용 프로그래밍 인터페이스(API:

Application Programming Interface)라고 알려진 라이브러리 함수를 이용하는 방식

– 하나의 응용 프로그램에서 다양한 유형의 DB를 접근할 수 있음

두가지 방식이 있음

– SQL/CLI (SQL Call Level Interface) : ODBC 기반 – JDBC (Java Database Connectivity)

• 많은 DBMS 회사들이 자사의 JDBC 드라이버 (APIs)를 제공함

라이버러리 함수호출 방식

(18)

JDBC 프로그래밍 절차

– Java class library “java.sql.*”를 import – JDBC 드라이버를 로드

– Java 프로그램에 필요한 변수들을 생성한다.

– 연결객체를 생성한다.

– 문장객체를 생성한다.

– 문장매개변수 설정

라이버러리 함수호출 방식

(19)

연결객체 생성 : conn 원하는 DB를 연결함

r : 결과객체

next()

질의결과

JDBC 드라이버를 로드함 JDBC 클래스 라이버러리를 import

문장객체 생성 : s

질의어 실행

(20)

저장 프로시저

– 데이터베이스 서버의 DBMS에 저장된 프로그램 모듈

– SQL/PSM (SQL/Persistent Stored Modules)이라는 SQL 확장을 사용함

– DB 서버에 한번 저장된 프로시저는 여러 응용에서 반복적으로 호출될 수 있으므로 응용 프로그램 생산성과 신뢰성 제고

– Assertions, Triggers 보다 더 복잡한 제약조건을 검사

저장 프로시저와 함수

인터넷

DBMS

SP1

Stored procedures sp1(a,b)

sp1(a,b)

응용 프로그램

(21)

저장 프로시저 생성

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);

저장 프로시저와 함수

(22)

저장 프로시저와 함수

(23)

• 데이터베이스 프로그래밍 기법 소개

– 내포된 SQL 방식

– 라이버러리 함수 호출방식

– 데이터베이스 프로그래밍 방식

• 데이터베이스 프로그래밍은 정보화의 기본 기술임

– 프로그래밍 기술 – 데이터베이스 지식

– 양자를 결합하여 사용하는 기술

요약(con ’t.)

참조

관련 문서

특정한 정책목표를 달성하는 데 필요한 활동을 기준으로

전자는 기술적인 진입장벽이 있 을 때 이익극대화의 수단이 되며, 후자는 시장의 진입장벽을 극복하기 위한 후발주자의 경험곡선효과의 획득(초기에

• 고객의 편익과 경쟁패턴을 바꿀 혁신적인 제품 출시로 새로운 표준 확립 (제품혁신, 세분시장혁신, 편익혁신). 시장선도자 Star에 대한 Gillette의 추월

그러나 임금이 아주 높으면 좌상향의 기울기로 역전... 즉,

• 경쟁자를 이기는데 집중하지 않고, 고객과 회사를 위한 가치 도약을 이뤄 새로운 비경 쟁 시장 공간을 창출함으로써 경쟁 자체에서 벗어 난다.. •

- 데이터베이스에 새로운 데이터를 저장하거나, 저장된 데이터를 갱신하 는 언어와 데이터를 검색하는 질의어로 구성된다... 11. ③ DELETE:

[r]

전인적 성장을 바탕으로 자아 정체성을 확립하고 자신의 진 로와 삶을 개척하는 사람.. 기초 능력의 바탕 위에 다양한 발상과 도전으로