목차
📌 SQL 테스트는 SQL이 작성 의도에 맞게 원하는 기능을 수행하는지 검증하는 과정이다.
💡 구문 오류(Syntax Error) : 구문 오류는 잘못된 문법으로 작성된 SQL문을 실행하면 출력되는 오류를 의미한다.
💡 디버깅(Debugging) : 디버깅은 오류를 잡기 위해 소스 코드를 한 줄 한 줄 추적해 가며 변수 값의 변화를 검사하는 작업이다.
📌 단문 SQL 테스트는 DDL, DML, DCL이 포함되어 있는 SQL과 TCL을 테스트하는 것으로, 직접 실행하여 결과물을 확인한다.
💡 DESCRIBE, DESC : DESCRIBE는 개체의 정보를 확인할 때 사용하는 명령어이고, DESC는 DESORIBE의 약어로 DESC를 사용해도 동일한 기능을 수행한다.
💡 TCL(Transaction Control Language)은 트랜잭션을 제어하는 COMMIT, ROLLBACK SAVEPOINT 명령을 가리키는 용어이다.
🔔 예제1) MySQL에서 <학생> 테이블의 정보를 확인하는 SQL문을 작성하시오.
DESC 학생;
<결과>
Field | Type | Null | Key | Default | Extra |
이름 | varchar(8) | No | noname | ||
학번 | Int(11) | No | PRI | ||
전공 | char(8) | Yes | |||
주민번호 | char(13) | No | UNI |
💡 해설 : Field는 속성명, Type은 자료형, Null은 Null 허용 여부, Key는 기본키 (Primary Key)와 유니크(Unique) 옵션의 여부, Default는 기본값, Extra는 그 외의 기타 옵션을 의미한다.
🔔 예제2) Oracle에서 'KIM' 사용자의 시스템 권한을 확인하는 SQL문을 작성하시오.
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'KIM';
<결과>
GRANTEE | PRIVILEGE | ADMIN_OPTION |
KIM | CREATE TABLE | NO |
KIM | CREATE VIEW | NO |
💡 해설 : 'KIM'이 테이블과 뷰를 만들 권한(PRIVILEGE)을 갖고 있지만, 해당 권한을 다른 유저에게 부여할 수 있는 권한(ADMIN_OPTION)은 없다는 의미이다.
🔔 예제3) MySQL에서 locallhost 서버의 'KIM' 사용자에 대한 권한을 확인하는 SQL문을 작성하시오.
SHOW GRANTS FOR 'KIM'@'localhost';
<결과>
Grants for KIM@localhost |
GRANT SELECT ON *.* TO 'KIM'@'localhost' |
💡 해설 : localhost 서버에서 'KIM' 사용자는 모든 스키마와 테이블에 대해 조회(SELECT) 권한이 있다는 의미이다.
📌 프로시저, 사용자 정의 함수, 트리거 등의 절차형 SQL은 디버깅을 통해 기능의 적합성 여부를 검증하고, 실행을 통해 결과를 확인하는 테스트를 수행한다.
🔔 예제1) Oracle에서 변수 RESULT를 출력하는 SQL문을 작성하시오.
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE(RESULT);
💡 해설 : Oracle에서 화면에 변수나 텍스트 등을 출력하기 위해서는 DBMS_OUTPUT 패키지의 PUT_LINE 함수를 사용해야 한다. 첫 번째 행은 DBMS_OUTPUT 패키지를 사용하겠다는 의미이고, 두 번째 행은 실제 출력을 위해 PUT_LINE 함수를 사용한 것이다. 실행하면 RESULT에 기억된 값이 화면에 표시된다.
🔔 예제2) MySQL에서 변수 RESULT를 출력하는 SQL문을 작성하시오.
SELECT RESULT;
💡 해설 : MySQL에서는 SELECT만으로 간편하게 화면에 변수나 텍스트 등을 출력할 수 있다. Oracle의 명령문을 사용하면 오류가 발생한다.
💡 Oracle 오류 확인 예
오류가 발생한 장소와 오류 코드 오류 내용이 표시된다.
LINE/COL : 7/1 ERROR : PLS-00363 : 'N' 식은 피 할당자로 사용될 수 없습니다.
PLS는 오라클에서 프로시저나 함수를 호출할 때 파라미터에 오류가 있을 때 발생한다.
💡 주석(Comment) : 설명을 위해 입력한 부분을 주석이라고 한다. 즉 주석은 사람만 알아볼 수 있으며, 컴파일 되지도 않는다. 때문에 잡시 사용하지 않을 SQL 코드를 주석으로 처리해 두면 지우지 않고도 해당 코드를 무시하고 SQL문을 수행할 수 있다.
🔔 DBMS의 종류에 따라 다음과 같이 다른 주석 기호를 사용한다.
1. # : MySQL 에서 사용하는 주석 기호로 # 다음에 오는 한 줄을 주석으로 처리한다.
2. -- : Oracle에서 사용하는 주석 기호로 -- 다음에 오는 한 줄을 주석으로 처리한다.
3. /* */ : DBMS에 관계없이 '/*'과 '*/' 사이에 있는 문장을 모두 주석으로 처리한다.
💡 Oracle은 DBMS_OUTPUT 패키지로 화면에 결과를 출력하려면 절차형 SQL을 실행하기 전에 'SET SERVEROUTPUT ON' 명령어로 환경변수 를 설정해야 한다.
CREATE OR REPLACE PROCEDURE u_sum_avg(u_name IN CHAR)
IS
1. v_sum INT;
2. v_avg INT;
BEGIN
3. DBMS_OUTPUT.ENABLE;
4. SELECT kor + math + eng INTO v_sum FROM student
WHERE name = u_name;
5. v_avg := v_sum/3;
6. DBMS_OUTPUT.PUT_LINE(v_sum);
7. DBMS_OUTPUT.PUT_LINE(v_avg);
8. -- INSERT INTO score VALUES(u_name, v_sum, v_avg);
END;
📌 [정보처리기사] 서버프로그램 구현 - 개발환경 구축/서버 개발 (1) | 2024.02.26 |
---|---|
📌 [정보처리기사] SQL 활용 - ORM(Object-Relational Mapping)/쿼리 성능 최적화 (4) | 2024.02.26 |
📌 SQL 활용 - 사용자 정의 함수/DBMS 접속 기술 (0) | 2024.02.22 |
📌 [정보처리기사] SQL 활용 - 프로시저(Procedure)/트리거(Trigger) (0) | 2024.02.21 |
📌 [정보처리기사] SQL 응용 : DML-JOIN (0) | 2024.02.21 |