응용 프로그램 코드 안에 SQL문을 내포하여 사용한다.
SQL문들은 전처리기를 통해 DB 호출 함수로 변환하고 이 다음에 컴파일을 한다.
EXEC SQL와 END-EXEC로 호스트 언어 내에서 구분한다.
자바에서 내장된 SQL문은 SQLJ라고 부른다.
임베디드된 SQL문의 결과가 여러 튜플이 한꺼번에 나올 경우, 커서(반복자)를 이용해 하나씩 처리한다.
FETCH문으로 다음 튜플을 넘어감
: (콜론)으로 변수를 사용
정적인 프로래밍이다.
SQL CLI (Call Level Interface) :
프로그램 코드 안에서 라이브러리를 호출하여 데이터 베이스를 사용하는 방식이다.
동적인 프로그래밍이다.
SQL문들이 동적으로 만들어져 호출된 곳에 문자열 매개변수로 전달된다.
JDBC : (Java에서 사용하는 라이브러리)
DBMS 안에 함수 형태로 프로그램 코드를 작성해 놓는다.
응용 프로그램에서는 DB에 있는 프로시저나 함수를 호출하여 사용한다.
내장형 방식보다 더 효율적이다.
장점 :
저장 프로시저 :
1.
DELIMITER $$
CREATE PROCEDURE abc()
BEGIN
DECLARE a INT;
DECLARE b INT;
DECLARE c INT;
SET a=200; SET b=300; SET c = a+b;
END $$
DELIMITER ;
CALL abc();
2. 파라미터에 입력값
DELIMITER $$
CREATE PROCEDURE search(IN host_name VARCHAR(10))
BEGIN
SELECT * FROM student WHERE name = host_name;
END $$
DELIMITER ;
CALL search('홍길동');
3. 파라미터에 출력값
DELIMITER $$
CREATE PROCEDURE get(IN project_num INT, OUT result INT)
BEGIN
DECLARE department_num INT;
SELECT dnum INTO department_num FROM project WHERE pnumber = project_num;
SET result = department_num;
END $$
DELIMITER ;
CALL get(1, @result);
SELECT @result;
DELIMITER $$
CREATE FUNCTION get(bYEAR INT) RETURNS INT
BEGIN
DECLARE age INT;
SET age = YEAR(CURDATE())-bYEAR;
RETURN age;
END $$
DELIMITER ;
SELECT get(1998);
응용 프로그램은 JAVA나 C언어 등으로 이루어져있다.
JAVA나 C언어는 절차적으로 한줄 한줄 명령어가 실행된다.
데이터베이스는 SQL 언어를 사용한다.
SQL은 쿼리를 통해 집합이 결과로 반환된다.
이 두 언어의 간극을 '임피던스 불일치'라고 부른다.
API 라이브러리로 데이터 베이스 사용
- 응용 프로그램 안에서 함수 호출(API)을 하여 DB에 접근
- SQL/CLI (ISO에서 만든 국제 표준), JDBC(자바) (많이 사용 중), ODBC(C언어) 방식이 있다.
- 함수를 이용하므로 런타임에 DB에 접근하게 된다. (동적)
- Maria DB, Oracle 등 DBMS 종류와 무관하게 사용가능 (표준으로 정의되어 있음)