물리적 데이타베이스 수정 : 인덱스를 추가하거나 제거
스키마 변경 : 테이블 생성이나 제거
DDL 문장 실행이 성공이면, 0을 반환
실행이 오류일 경우, 예외사항이 발생시킴
다른 SQL 문장의 실행
execute 메소드
SQL 문장의 실행의 결과로 테이블을 얻을지, SQL 문장에 의해 변경된 행의 수를 얻을지 모를 때에 사용
SQL 문장이 여러 값들을 반환하도록 허용
반환된 각 값들은 ResultSet이거나 행의 개수
execute 메소드 사용 예
boolean isResultSet; //반환 결과가 ResultSet이면 참 resultSet result; // 현재 ResultSet
ResultSetMetaData rmd;
int rowcount; // 현재 행 수
isResultSet = stmt.execute(sqlStatement);
if(isResultSet) { // ResultSet이 반환
result = stmt.getResultSet(); //Result Set을 처리하는 코드를 삽입 rmd = result.getMetaData();
while(result.next( ))
{ for(int i=1;i <= rmd.getColumnCount( ); i++) //TP 22page 예제 참조
…….
}
else { //ResultSet이 아닌 경우
rowcount = stmt.getUpdateCount();
}
Prepared Statement
PreparedStatement 인터페이스
인자를 가질 수 있도록 구성된 SQL 문장을 미리 컴파일하여 데이타베이스 기능을 사용
인자 값들은 서로 다르면서 여러 번 수행되는 SQL 문장 구성에 용이
예) 학생들에 대한 성적 입력을 위한 갱신 질의
PreparedStatement pstmt = con.prepareStatement(
“update grades set points=? where id=? and assignmentId=?”);
pstmt.setInt(1, 75); //첫 번째 인자는 점수에 대한 숫자 pstmt.setInt(2, 12345); //두 번째 인자는 학생 ID
pstmt.setInt(3, 1); //세 번째 인자는 반 ID
rowcount = pstmt.executeUpdate(); //실제 갱신이 수행되며, 갱신
이 적용된 행의 개수가 반환됨.
데이터베이스 저장 프로시저
저장 프로시저(stored procedure)
데이타베이스 서버의 DBMS에 저장된 프로그램 모듈
함수들이나 프로시저들
데이타베이스에 지속적으로 저장됨
범용 프로그래밍 언어나 SQL 문장을 이용하여 저장 프로시저를 작성
함수 선언 형식 예)
CREATE FUNCTION <함수 이름>(<매개 변수>) RETURN <리턴 타입>
<지역적인 선언>
<함수 몸체>;
호출 형식 예)
CALL <프로시저나 함수 이름>(<매개 변수 목록>)
저장 프로시저가 유용한 경우
어떤 데이타베이스 프로그램을 여러 응용에서 필요로 할 경우
중복된 노력을 줄일 수 있고, 소프트웨어의 모듈성을 높임
어떤 환경에서 클라이언트와 서버 사이에 데이터 전송과 통신 비용을 줄이기 위해
복잡한 타입의 유도된 데이터를 데이타베이스 사용자가 이용할 수 있도록 하기 위해
예) 그림이나 기하학적 객체 같은 데이터 타입
JDBC에서 저장 프로시저 사용
CallableStatement 인터페이스를 이용
예) SHOW_SUPPLIERS 저장 프로시저의 호출
create procedure SHOW_SUPPLIERS as
select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME from SUPPLIERS, COFFEES
where SUPPLIERS.SUP_ID = COFFEES.SUP_ID order by SUP_NAME
CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery()
SQL/PSM(SQL/Persistent Stored Modules)
지속적 저장 모듈을 작성할 수 있도록 허용하는 SQL 표준 의 한 부분
함수와 프로시저를 생성하는 문장
저장 프로시저와 함수의 코드를 작성하는데 사용할 수 있
는 일반적인 목적의 프로그램 구조도 포함
SQL/PSM 에서 함수 선언 예
예) 특정 영화에 속한 비디오의 수를 기반으로 {‘HUGE’, ‘LARGE’,
‘SMALL’) 중의 한 값을 리턴
함수 호출 방법
CREATE FUNCTION Video_size(IN movie_id String) RETURNS VARCHAR [7]
DECLARE No_of_videos INTEGER;
SELECT COUNT(*) INTO No_of_videos
FROM VideoTape WHERE movieId=movie_id;
IF No_of_videos > 10 THEN RETURN “HUGE”
ELSEIF No_of_videos > 5 THEN RETURN “LARGE”
ELSE RETURN “SAMLL”
END IF;
CALL Video_size (‘101’);