Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

CKtrace's Devlog

[DB] - 삽입 SQL (ESQL) 본문

DB

[DB] - 삽입 SQL (ESQL)

CKtrace 2022. 6. 27. 15:11

 

 

 

 

 

About ESQL(Embedded SQL)


 

앞서 알아본 SQL 문 VS 삽입 SQL 

 

 

앞서 알아본 SQL 관련 정보가 궁금하신 분들을 위해 제가 작성한 SQL 관련 포스팅을 첨부해두도록 하겠습니다!

 

 

 

[DB] - SQL의 데이터 정의 기능

What is SQL? SQL, Structured Query Language는 관계 DB를 위한 표준 질의어로 많이 사용되는 언어이고, 사용자가 처리를 원하는 데이터가 무엇인지만 제시하고 데이터 처리 과정에 대해서는 언급할 필요가

cktrace.tistory.com

 

 

[DB] - SQL의 데이터 조작 기능

Before Entering... SQL이란 무엇일까? SQL을 통해 테이블을 어떻게 생성하고 제거할까? SQL을 통해 레코드를 삭제하는 법은 무엇일까? ... 위와 같은 궁금증을 갖는 분들을 위해 제가 포스팅한 글을 첨부

cktrace.tistory.com

 

 

앞서 알아봤던 SQL 문은 DBMS(데이터베이스 관리 시스템)에 Interactive(대화식)으로 직접 입력해 수행 결과를 바로 확인한 것이었지만, 삽입 SQL, 즉 ESQL(Embedded SQL)은 응용 프로그램 안에 SQL 문을 삽입해 사용하는 것입니다.

 

 

일반적인 SQL 문과 다른 ESQL 문을 사용할 때는 아래와 같은 특징을 염두하고 사용해야 합니다.

 

 

  • ESQL 문은 프로그램 안에서 일반 명령문이 위치 가능한 곳이면 어디든 삽입 가능
  • 프로그램에 선언된 일반 변수를 ESQL 문에서 사용 가능합니다. 대신, SQL 문에서 일반 변수 사용 시 앞에 콜론을 붙여 테이블 이름 또는 속성의 이름을 구분
  • 프로그램 안의 일반 명령문과 구별하기 위해 ESQL 문 앞에 EXEX SQL을 붙입니다.

 

수행 결과 여러 개의 행을 반환하는 SELECT 문을 ESQL 문으로 사용할 때 커서, 즉 Cursor라는 도구가 필요합니다.

 

 

ESQL 문은 이러한 커서를 사용하는 방법과 사용하지 않는 방법 두 가지가 존재하며, 이 두 가지 경우에 대해 하나씩 알아보도록 하겠습니다.

 

 

 

 

 

If the Cursor is not required


 

SQL 문 실행 시 특별히 결과 테이블을 반환하지 않는 CREATE TABLE 문, INSERT 문, DELETE 문, UPDATE 문, 결과로 행 하나만 반환하는 SELECT문인 경우에는 커서가 필요하지 않습니다.

 

C언어로 작성한 프로그램 예시

int main(){
	EXEC SQL BEGIN DECLARE SECTION;
         char p_no[3], p_name[15];
         int price;
	EXEC SQL END DECLARE SECTION;
    
    printf("상품 번호를 입력하세요 : ");
    scanf("%s", p_no);
    
    EXEC SQL SELECT 상품명, 단가 INTO  :p_name, :price
    	 FROM 상품
         WHERE 상품번호 = :p_no;
         
    printf("\n 상품명 = %s", p_name);
    printf("\n 단가 = %d", price);
    
    return 0;
}

 

Code Review

☞ 입력된 상품 번호에 해당되는 상품명과 단가를 검색하는 코드입니다.

 

다음으로는 커서가 필요한 경우는 어떠할지 알아보도록 하겠습니다.

 

 

 

 

 

If the Cursor is required


 

SELECT 문의 실행 결과로 하나의 행이 아닌 여러 행이 검색될 경우 한 번에 하나의 행씩 차례로 접근 가능하게 해주는 커서가 필요합니다.

 

커서는 DECLARE 명령어를 이용해 선언합니다.

 

커서 선언 기본 형태

EXEC SQL DECLARE cursor_name CURSOR FOR SELECT 문;

 

커서 선언 활용 예시

EXEC SQL DECLARE manufacture_cursor CURSOR FOR SELECT 상품명, 가격 FROM 상품;

 

Code Review

☞ 상품 테이블에서  상품명과 가격을 모두 검색하는 SELECT 문을 위한 커서를 manufacture_cursor라는 이름으로 선언합니다.

 

 

명심할 점은 커서를 선언한 후 SELECT 문을 실행하는 명령이 별도로 필요하다는 것입니다.

 

 

-- 커서 선언 후 SELECT 문 실행 기본 형태
EXEC SQL OPEN cursor_name;

-- 커서 선언 후 SELECT 문 실행 활용 예시
EXEC SQL OPEN manufacture_cursor;

 

 

 

OPEN 명령어를 통해 SELECT 문이 실해되면서 검색된 행들이 반환되고, 커서는 검색된 행들 중 첫 번째 행의 바로 앞에 위치합니다.

 

검색된 행들을 차례로 처리하기 위해 커서를 이동해주는 명령이 필요하고 이것은 가능하게 해주는 것이 바로 명령어 FETCH입니다.

 

FETCH는 커서를 이동해 처리해야할 다음 행을 가리키도록 하고, 커서가 가리키는 행으로부터 속성 값들을 가져와 변수에 저장하게 해 줍니다.

 

 

기본 형태

EXEC SQL FETCH cursor_name INTO variable_list;

 

 

커서를 더 사용하지 않을 때는 CLOSE 명령어를 사용합니다.

 

 

기본 형태

EXEC SQL CLOSE cursor_name;

 

 

 

 

 

이상으로 삽입 SQL(ESQL)에 대한 글을 마치도록 하겠습니다.

 

긴 글이었지만 읽어주셔서 감사하다는 말씀드리며, 다음에는 더 좋은 글로 찾아뵙도록 하겠습니다!

 

감사합니다.

 

 

 

 

 

'DB' 카테고리의 다른 글

[DB] - 함수 종속  (0) 2022.06.28
[DB] - 데이터베이스 설계 및 이상 현상  (0) 2022.06.27
[DB] - 뷰  (0) 2022.06.27
[DB] - SQL의 데이터 조작 기능  (0) 2022.06.27
[DB] - SQL의 데이터 정의 기능  (0) 2022.06.23
Comments