목차
📌 사용자 정의 함수는 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하며, 종료 시 처리 결과를 단일값으로 반환하는 절차형 SQL이다.
💡 내장 함수 : DBMS에 기본적으로 포함되어 있는 함수들을 의미하여, 합계를 구하는 SUM(), 평균을 구하는 AVG() 같은 그룹 함수가 여기에 속한다.
구분 | 프로시저 | 사용자 정의 함수 |
변환값 | 없거나 1개 이상 가능 | 1개 |
파라미터 | 입/출력 가능 | 입력만 가능 |
사용 가능 명령문 | DML, DCL | SELECT |
호출 | 프로시저, 사용자 정의 함수 | 사용자 정의 함수 |
사용 방법 | 실행문 | DML에 포함 |
📌 사용자 정의 함수의 구성은 프로시저와 유사하다. 프로시저의 구성에서 RETURN만 추가하면 된다.
📌 사용자 정의 함수를 생성하기 위해서는 CREATE FUNCTION 명령어를 사용한다.
CREATE [OR REPLACE] FUNCTION 사용자 정의 함수명(파라미터)
[지역변수 선언]
BEGIN
사용자 정의 함수 BODY;
RETURN 반환값
END;
🔔 예제) 'i_성별코드'를 입력 받아 1이면 "남자"를, 2이면 "여자"를 반환하는 사용자 정의 함수를 'Get_S_성별'이라는 이름으로 정의하시오.
1. CREATE FUNCTION Get_S_성별(i_성별코드 IN INT)
2. RETURN VARCHAR2
3. IS
BEGIN
4. IF i_성별코드 = 1 THEN RETURN '남자';
5. ELSE RETURN '여자';
6. END IF;
END;
💡 해설 :
📌 사용자 정의 함수는 DML에서 속성명이나 값이 놓일 자리를 대체하여 사용된다.
SELECT 사용자 정의 함수명 FROM 테이블명;
INSERT INTO 테이블명(속성명) VALUES (사용자 정의 함수명);
DELETE FROM 테이블명 WHERE 속성명 = 사용자 정의 함수명;
UPDATE 테이블명 SET 속성명 = 사용자 정의 함수명;
🔔 예제) 다음의 <사원> 테이블을 출력하되, '성별코드'는 앞에서 사용자 정의 함수 'Get_S_성별'에 값을 전달하여 반환 받은 값으로 대체하여 출력하시오.
<사원>
이름 | 성별코드 |
김대진 | 1 |
이고을 | 2 |
최승규 | 1 |
송하나 | 2 |
SELECT 이름, Get_S_성별(성별코드) FROM 사원;
<결과>
이름 | Get_S_성별(성별코드) |
김대진 | 남자 |
이고을 | 여자 |
최승규 | 남자 |
송하나 | 여자 |
💡 해설: <사원> 테이블에서 '이름' 속성과 앞에서 정의한 사용자 정의 함수 'Get_S_성별'에 '성별코드' 속성을 인수로 전달하고 반환 받은 값을 결과로 출력한다. '성별코드'의 값이 1이면 남자가 출력되고, 1이 아니면 여자가 출력 된다.
📌 사용자 정의 함수를 제거하기 위해서는 DROP FUNCTION 명령어를 사용한다.
DROP FUNCTION 사용자 정의 함수명;
🔔 예제) 앞에서 생성된 사용자 정의 함수 'Get_S_성별'을 제거하시오.
DROP FUNCTION Get_S_성별;
웹 응용 시스템 이메일 사이트와 비교하면 이해가 쉽다. 예를 들어, 이메일을 확인하기 위해 사이트에 접속한다고 가정할 때, 사이트에 접속하기 위해 사용하는 웹 브라우저는 '웹 응용 프로그램'이고, 접속한 사이트에서 보여주는 웹 페이지의 내용은 '웹 서버'에서 송출되는 것이다. 로그인 후 이메일을 확인하기 위해 받은 편지함을 클릭하면 서버는 받은 편지 목록에 대한 요청을 'WAS'에게 보내고, 'WAS'는 DBMS로 부터 데이터를 가져와 '웹 서버'에 전달함으로써 사용자는 받은 편지 목록을 확인할 수 있다.
💡 정리하면 웹 서버는 웹 페이지, 저용량 자료 등의 처리를 담당하고 WAS는 DBMS와 통신하며 대용량 파일이나 복잡한 로직 등의 처리를 담당한다.
📌 DBMS 접속 기술은 DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크 등을 의미한다.
💡 API(Application Programming Interface) : API는 응용 프로그램 개발 시 운영체제나 DBMS 등을 이용할 수 있도록 규칙 등에 대해 정의해 놓은 인터페이스를 의미한다.
💡 프레임워크(Framework) : 프레임워크는 본래 '뼈대', '골조'를 의미하는 용어로, 소프트웨어에서는 특정 기능을 수행 하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체를 가리킨다.
💡 Java SE : Java 표준안으로서, Java의 문법과 기능들을 정의하는 명세서이다. 개발 도구인 JDK(Java Development Kit)에 포함되어 사용되며, JDBC의 기능들을 정의하는 클래스 파일들을 포함하고 있다.
💡 드라이버 : 다른 장치나 시스템을 제어하는데 사용되는 프로그램을 의미한다.
SQL Mapping : SQL로 호출되는 테이블이나 열 데이터를 개발하려는 언어의 객체에 맞도록 변환하여 연결하는 것을 의미한다.
📌 동적 SQL은 개발 언어에 삽입되는 SQL 코드를 문자열 변수에 넣어 처리하는 것으로, 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있다.
💡 동적 SQL은 쉽게 말해 사용자가 응용 프로그램을 실행 시킨 후 입력란에 SQL을 직접 입력하여 결과를 확인할 수 있는 것을 말한다.
💡 NVL 함수 : NVL(A, B) 형태의 함수로, A가 NULL인 경우 B를 반환하고 아니면 A를 반환한다. 동적 SQL에서는 원하는 조건에 따라 자유롭게 SQL 문을 바꿀 수 있으므로 NVL함수 없이 SQL문을 구성하는 것이 가능하다.
💡 프리컴파일(Precompile) : 프리컴파일은 고급언어를 기계어로 번역하는 컴파일(Compile) 전에 수행하는 작업으로, 필요한 라이브러리를 불러오거나 코드에 삽입된 SQL문을 DB와 연결하는 작업을 수행하는 것을 의미한다.
정적 SQL(Static SQL) | 동적 SQL(Dynamic SQL) | |
SQL 구성 | 커서(Cursor)를 통한 정적 처리 | 문장열 변수에 담아 동적 처리 |
개발 패턴 | 커서의 범위 안에서 반복문을 활용하여 SQL 작성 | NVL 함수 없이 로직을 통해 SQL 작성 |
실행 속도 | 빠름 | 느림 |
사전 검사 | 가능 | 불가능 |
💡 커서(Cursor) : SQL문의 실행 결과로 반환된 복수 개의 튜플들에 접근할 수 있도록 해주는 기능을 의미한다.
📌 [정보처리기사] SQL 활용 - ORM(Object-Relational Mapping)/쿼리 성능 최적화 (4) | 2024.02.26 |
---|---|
📌 [정보처리기사] SQL 활용 - SQL 테스트 (0) | 2024.02.22 |
📌 [정보처리기사] SQL 활용 - 프로시저(Procedure)/트리거(Trigger) (0) | 2024.02.21 |
📌 [정보처리기사] SQL 응용 : DML-JOIN (0) | 2024.02.21 |
📌 [정보처리기사]데이터베이스 구축 - SQL 응용/DML SELECT (0) | 2024.02.19 |