2-7. DCL
1. DCL 개요
• 유저를 생성하고 권한을 제어할 수 있는 DCL(DATA CONTROL LANGUAGE) 명령어
2. 유저와 권한
가. 유저 생성과 시스템 권한 부여
• 유저 생성 명령어 : CREATE USER PJS IDENTIFIED BY KOREA7;
• 유저생성 권한 부여 : GRANT CREATE USER TO SCOTT;
• 로그인 할 수 있도록 권한 부여 : GRANT CREATE SESSION TO PJS;
• 테이블 생성 권한 부여 : GRANT CREATE TABLE TO PJS;
나. OBJECT에 대한 권한 부여
• 다른 접속자에게 테이블을 SELECT 할 수 있는 권한 부여 : GRANT SELECT ON MENU TO SCOTT;
3. ROLE을 이용한 권한 부여
• ROLE 생성 명령어 : CREATE ROLE LOGIN_TABLE;
• ROLE에 권한 부여 : GRANT CREATE SESSION, CREATE TABLE TO LOGIN_TABLE;
• 유저에서 ROLE 부여 : GRANT LOGIN_TABLE TO PJS;
2-8. 절차형 SQL
1. 절차형 SQL 개요
• 절차형 SQL을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다.
2. PL/SQL 개요
가. PL/SQL 특징
• ORACLE의 PL/SQL은 BLOCK 구조로 되어있고 BLOCK 내에는 DML 문장과 QUERY 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할 수 있으며, 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어이다.
1. PL/SQL은 BLOCK 구조로 되어있어 각 기능별 모듈화가 가능하다.
2. 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환한다.
3. IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.
4. DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.
5. PL/SQL은 ORACLE에 내장되어 있으므로 ORACLE과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.
6. PL/SQL은 응용 프로그램의 성능을 향상시킨다.
7. PL/SQL은 여러 SQL 문장을 BLOCK으로 묶고 한 번에 BLOCK 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.
나. PL/SQL 구조
다. PL/SQL 기본 문법 (SYNTAX)
• 프로시저 생성 명령어 :
CREATE [OR REPLACE] PROCEDURE [PROCEDURE_NAME] (ARGUMENT1 [MODE] DATA_TYPE1, ARGUMENT2 [MODE] DATE_TYPE2, …. ..) IS [AS] … … BEGIN … … EXCEPTION … … END; /
• 프로시저 삭제 명령어 :
DROP PROCEDURE [PROCEDURE_NAME];
3. T-SQL 개요
가. T-SQL 특징
• 근본적으로 SQL Server를 제어하기 위한 언어로서, MS사에서 ANSI/ISO 표준의 SQL에 약간의 기능을 더 추가해 보완적으로 만든 것이다.
나. T-SQL 구조
다. T-SQL 기본 문법 (SYSTAX)
• 프로시저 생성 명령어
CREATE PROCEDURE [SCHEMA_NAME.]PROCEDURE_NAME @PARAMETER1 DATA_TYPE1 [MODE], @PARAMETER2 DATA_TYPE2 [MODE], … … WITH AS … … BEGIN … … ERROR 처리… … END;
• 프로시저 삭제 명령어
DROP PROCEDURE [SCHEMA_NAME.]PROCEDURE_NAME;
4. PROCEDURE의 생성과 활용
• 프로시저 생성 명령어 :
create or replace procedure p_dept_insert (v_deptno in number, v_dname in varchar2, v_loc in varchar2, v_result out varchar2)
is cnt number := 0;
begin select count(*) into cnt from dept where deptno = v_deptno and rownum =1;
if cnt>0 then v_result :='이미 등록된 부서번호이다';
else insert into dept (deptno, dname, loc) values (v_deptno, v_dname, v_loc);
commit;
v_result :='입력완료~!';
end if;
exception when others then rollback;
v_result :='ERROR 발생';
end;
/
5. USER DEFINED FUNCTION의 생성과 활용
• 데이터베이스 내에 저장해 놓은 명령문의 집합을 의미, 사용자가 별도의 함수를 만들 수 있다.
• 예) K-리그 8월 경기결과와 두 팀간의 점수차를 ABS 함수를 사용하여 절대값으로 출력한다. (내장함수 ABS 사용)
select sche_date 경기일자, hometeam_id || '-' || awayteam_id 팀들,
home_score || '-' || away_score SCORE,
abs(home_score - away_score) 점수차
from schedule
where gubun= 'Y'
and sche_date between '20120801' and '20120831'
order by sche_date;
• UTIL_ABS 라는 사용자 정의 함수 생성
create or replace function util_abs (v_input in number)
return number is v_return number :=0;
begin if v_input < 0 then v_return := v_input * -1;
else v_return := v_input;
end if;
return v_return;
end;
/
• 같은 쿼리문을 사용자 정의 함수를 사용
select sche_date 경기일자, hometeam_id || '-' || awayteam_id 팀들,
home_score || '-' || away_score SCORE,
util_abs(home_score - away_score) 점수차
from schedule
where gubun = 'Y'
and sche_date between '20120801' and '20120831'
order by sche_date;
• 결과같은 동일하다.
6. TRIGGER의 생성과 활용
• Trigger 란?
○ 특정한 테이블에 INSERT, UPDATE, DELETE 와 같은 DML문이 수행되었을 때, DB에서 자동으로 동작하도록 작성된 프로그램
○ Trigger 는 데이터베이스에 의해 자동 호출되지만 하나의 트랜잭션 안에서 일어나는 일련의 작업이다.
즉, 하나의 트랜잭션이 rollback 이나 commit 이 일어나면 Trigger도 같이 rollback이나 commit 이 실행 된다.
• Trigger 생성 소스
create or replace trigger summary_sales
after insert on order_list for each row declare
o_date order_list.order_date%type;
o_prod order_list.product%type;
begin o_date := :NEW.order_date;
o_prod := :NEW.product;
update sales_per_date set qty=qty + :NEW.qty,
amount = amount + :NEW.amount where sale_date = o_date
and product = o_prod;
if sql%notfound then insert into sales_per_date values(o_date, o_prod, :NEW.qty, :NEW.amount);
end if;
end;
/
7. 프로시저와 트리거의 차이점
출처 : SQL 전문가 가이드 교재
'개인공부정리 > SQLP | SQLD' 카테고리의 다른 글
SQL 전문가 가이드 2과목 3-3장 정리 요약 (0) | 2016.10.27 |
---|---|
SQL 전문가 가이드 2과목 3-(1~2)장 정리 요약 (0) | 2016.10.27 |
SQL 전문가 가이드 2과목 2-6장 정리 요약 (0) | 2016.10.27 |
SQL 전문가 가이드 2과목 2-(4~5)장 정리 요약 (0) | 2016.10.27 |
SQL 전문가 가이드 2과목 2-(1~3)장 정리 요약 (0) | 2016.10.27 |