본문 바로가기
학부 전공/DB

SQL의 시스템 관점(1 of 2) - 2

by 장어진 2021. 6. 19.

예전에는 Scroll Cursor도 사용했는데 line editor 개념으로 이해하면 된다. 지금에야 cpu성능이 좋아져서 별 걱정을 안 하지만 예전에는 속도가 느려져 전진만 가능하도록 사용하는 것이 일반적이었다고 한다. Cursor를 만드는 방법도 표준화가 잘 되어있지 않지만 PostgreSQL기준으로 보면 DECLARE name [BINARY] [INSENSITIVE] [[NO]SCROLL] CURSOR [{WITH|WITHOUT} HOLD] FOR query 이다. 이 스크롤 커서를 활용하면 앞에서 몇 번째, 뒤에서 몇 번째 등 과 같이 다양한 방식으로 값을 가져올 수 있는 장점이 있다.

읽기만 한다고 선언해줄 수도, 업데이트나 삭제를 하겠다고 선언을 할 수도 있지만 READ ONLY로 선언해준 것에 업데이트를 하려고 하면 오류가 발생한다.

INSENSITIVE를 선언하면 다른 사람이 수정을 한 것을 수정해도 되는 값이라면 수정을 허용하지만 나에게는 보여주지 않는다. 하지만, 수정하면 안 되는 부분이라면 수정을 못하도록 막아버린다. 예시로 기차표 예약을 생각해보자. 내가 기차표를 예약하려고 들어가서 눌렀으면 이제 그 자리는 다른 사람에게 예약된 자리라고 표시되어야 INSENSITIVE가 된 것이고 안 된 경우 다른 사람에게도 예약가능자리로 보여서 내가 머뭇거리는 순간에 그 사람이 예약할 가능성도 있다.

 

앞서 배운 SQL은 문장이 정해져있지만 Dynamic SQL은 문장이 정해져 있지 않은 것을 말한다. 예를 들어 유저가 입력한 문장을 scanf로 가져와 실행한다 가정하면 SQL문은 우리가 작성한 코드에 나타나지 않을 것이다. 이를 동적, Dynamic SQL이라고 하고 우리가 대표적으로 접하는 것은 psql이 있다. 이를 간단히 나타내면 다음과 같다.

Scanf(“%s”, query);

EXEC SQL PREPARE q FROM :query;  (사용자가 입력한 query문 가져오기)

EXEC SQL EXECUTE q;        (실제 query문 실행)

합치기 >> EXEC SQL EXECUTE IMMEDIATE : query;

 

Call-Level Interface

- SQL/CLI

- ODBC (위의 SQL/CLI와 유사, MS에서 window에 맞춰 개발을 했을 뿐)

- JDBC (JAVA Databases Connectivity) > 보통의 서버에서 많이 사용, 모든 운영체제에서 사용가능 하기 때문, 객체지향 개념이 포함되어있어 좀 더 하이레벨의 표현이 가능함.

1. DriverManger로 드라이버를 다운하고

2. DriverManger.getConnection()으로 연결

3. connection 객체에 createStatement로 스테이트를 리턴하던가

connection 객체에 prepareStatement로 쿼리문을 주면서 스테이트를 리턴하는 방식 둘 중 하나를 쓰면 된다.

4. statement의 경우 퀴리 문을 안 넘겨줬으니 excuteQuery(query)로 넘겨주고 prepare의 경우 미리 넘겨주었으니  excuteQuery()만 해줘도 된다. deleteupdate같은 경우 excuteUpdate(non - query - statement) 이런식으로 사용하면 된다.

위 사진이 전체적인 JDBC의 모습이고 맨 위에서 헤더 파일 가져오고 oracle이라는 것을 알 수 있다. 그 다음 ds라는 데이터 소스 만들고 URL, USER이름, password 등을 세팅을 한다. 이어서 getConnection, create, execute 등을 실행하고 while문을 돌리면서 itemnumbername을 출력하고 close하고 나오게 된다.

 

C 언어에 포함하는 것이 임베디드 sql이라면 그 개념을 java 에서도 밑의 사진처럼 시도도 했고 표준화가 되었지만 현재 지원도 잘 안하고 사용을 안한다고 봐도 무방하다고 한다. 가장 큰 이유는 IDE에서 #부분을 이해하지 못 해서 그렇지 않을까 하는 추측이 많다고 한다.

728x90

'학부 전공 > DB' 카테고리의 다른 글

What is Database & 트랜잭션의 ACID 속성  (0) 2021.06.23
데이터베이스 요약  (0) 2021.06.23
SQL의 시스템 관점(1 of 2) -1  (0) 2021.06.19
SQL - 제약과 트리거 2  (0) 2021.06.19
SQL - 제약과 트리거 1  (0) 2021.06.19