기타스키마객체

yuju·2022년 10월 28일
0

SQL

목록 보기
9/11

📕 뷰(VIEW)

: 테이블을 기반으로 만들어지는 가상의 테이블

행검색 또는 객체 권한 설정을 간편하게 사용하기 위한 기능을 제공

  1. 단순뷰 : 하나의 테이블을 기반으로 생성되는 뷰 : 검색뿐만 아니라 뷰를 이용한 테이블의 행 삽입, 변경, 삭제 가능

    단순뷰 생성시 그룹함수 또는 DISTINCT 키워드를 사용한 경우 검색만 가능

  2. 복합뷰 : 다수의 테이블을 기반으로 생성되는 뷰 : 검색만 가능

    단순뷰는 DISTINCT 키워드 및 그룹함수 사용이 불가능하지만 복합뷰는 사용가능

🔶 뷰 생성 - 서브쿼리 이용

	CREATE [OR REPLACE] [{FORCE| NOFORCE}] VIEW 뷰이름 [ (컬럼명, 컬럼명,...) ] AS SELECT 검색대상, 검색대상,... 
		FROM 테이블명 [WHERE 조건식] [WITH CHECK OPTION] [WITH READ ONLY] ;

✔ CREATE OR REPLACE : 동일한 이름의 뷰가 존재할 경우 기존 뷰를 삭제하고 새로운 뷰 생성

✔ FORCE : 서브쿼리의 검색결과가 없어도 강제로 뷰를 생성하기 위한 기능 제공

✔ WITH CHECK OPTION : 뷰를 생성한 서브쿼리의 조건식에서 사용된 컬럼에 저장된 값을 변경하지 못하도록 설정하는 기능 제공

✔ WITH READ ONLY : 검색만 가능하도록 설정하는 기능 제공 (단순뷰)

❕❕ 사용자가 뷰에 대한 시스템 권한이 없는데 뷰를 생성할 경우 에러 발생 >> 관리자(SYS)에게 뷰에 대한 시스템권한 요청

> 관리자 계정에서 아래 명령 실행 
GRANT CREATE VIEW TO SCOTT; 

시스템 관리자에게 뷰에 대한 시스템 권한을 부여 받은 후 뷰 관련 명령 사용 가능

EX) CREATE VIEW EMP_VIEW30 AS SELECT EMPNO,ENAME,DEPTNO FROM EMP_COPY WHERE DEPTNO=30;
==> 단순뷰 생성

➰ 뷰 목록 확인

USER_VIEWS : 뷰 정보를 제공하는 딕셔너리

✔ 뷰 검색 : 테이블에 저장된 행을 이용하여 검색

 SELECT * FROM VIEW NAME; 
- 단순뷰에 행 삽입 : 테이블에 행을 삽입 처리 - 뷰에 없는 컬럼에는 컬럼 기본값이 전달되어 삽입

- 복합뷰 
> EX) CREATE VIEW EMP_VIEW AS SELECT EMPNO, ENAME, SAL, DNAME, LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; 	

✔ 뷰 삭제

DROP VIEW 뷰이름; 

 > 테이블을 삭제해도 테이블을 기반으로 생성된 뷰 미삭제
 > 뷰가 참조할 수 있는 테이블이 없는 경우 에러 발생 

✔ ROWNUM : 검색행에 순차적으로 행번호를 제공하는 키워드

> 테이블 또는 뷰의 모든 컬럼을 다른 검색대상과 같이 사용할 경우 테이블명 테이블명.* 또는 [.*] 형식으로 표현하여 검색가능
	EX) SELECT ROWNUM,EMP_VIEW.* FROM EMP_VIEW;
    
> WHERE의 조건식에서 사용할때 > 또는 >= 또는 = 연산자를 이용한 연산식 사용 불가능

⭐ 인라인 뷰(INLINE VIEW)

SELECT 명령에서 FROM의 서브쿼리를 사용하여 일시적으로 생성되어 사용되는 뷰

   - 뷰 관련 시스템 권한이 없어도 인라인 뷰를 생성하여 사용가능
형식) SELECT 검색대상,... FROM (SELECT 검색대상,... FROM 테이블명 [WHERE 조건식])
  • ROWNUM 키워드SMS 인라인 뷰의 검색행에 순차적으로 부여되는 행번호로 처리행 전에 행번호를 미리 부여받지 못해 비교 검색 불가능
  • ROWNUM 키워드를 포함한 인라인 뷰를 생성하고 ROWNUM 키워드에 컬럼 별칭을 설정하여 조건식에 사용하여 검색 가능
  • WHERE의 조건식에서 사용할때 > 또는 >= 또는 = 연산자를 이용한 연산식 사용 불가능

⭐ 페이징 처리 : 하나의 웹 페이지에 원하는 범위의 행만 검색하여 출력하는 기능

EX) SELECT * FROM (SELECT ROWNUM RN,TEMP.* FROM (SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC) TEMP) WHERE RN=10;

📕 시퀀스(SEQUENCE)

: 숫자값(정수값)을 저장하여 자동 증가되는 값을 제공하는 객체

🔶 시퀀스 생성

CREATE SEQUENCE 시퀀스명 [START WITH 초기값] [INCREMENT BY 증가값] [MAXVALUE 최대값] [MINVALUE 최소값] [CYCLE] [CACHE 갯수]

✔ START WITH 초기값 : 시퀀스에 저장되는 초기값 설정 - 생략: NULL

✔ INCREMENT BY 증가값 : 자동 증가되는 숫자값 설정 - 생략 : 1

✔ MAXVALUE 최대값 : 시퀀스에 저장가능한 최대값 설정 - 생략 : 숫자값으로 표현 가능한 최대값

✔ MINVALUE 최소값 : 시퀀스에 저장가능한 최소값 설정 - 생략 : 1

✔ CYCLE : 시퀀스 저장값이 최대값을 초과할 경우 최소값부터 다시 제공되도록 반복하는 기능을 제공

✔ CACHE 갯수 : 임의의 저장공간에 자동 증가값을 미리 생성하여 제공할 수 있는 갯수를 설정하는 기능 - 생략 : 20

🔶시퀀스 확인 - USER_SEQUENCE

✔ 시퀀스 정보를 제공하는 딕셔너리

    EX) SELECT SEQUENCE_NAME, MAX_VALUE,MIN_VALUE, INCREMENT_BY FROM USER_SEQUENCES;

✔ 시퀀스에 저장된 숫자값을 이용하여 증가된 값을 제공하는 방법

  • 증가된 값 제공 후 시퀀스에는 증가된 값 자동저장
  • 시퀀스에 NULL 이 있는 경우 시퀀스의 최소값을 제공한 후 최소값으로 시퀀스의 저장값 변경 처리
형식) 시퀀스명.NEXTVAL
SELECT USER2.SEQ.NEXTVAL FROM DUAL; 

✔ 시퀀스 변경

ALTER SEQUENCE 시퀀스명 { MAXVALUE | MINVALUE | INCREMENT BY } 변경값

✔ 시퀀스 삭제

DROP SEQUENCE 시퀀스명   

📕 인덱스

테이블에 저장된 행을 보다 빠르게 검색하기 위한 기능을 제공하는 객체

  • 컬럼에 인덱스를 설정하면 익덱스 영역을 생성하여 컬럼에 대한 행 검색 속도 증가
  • 조건식에서 많이 사용하는 컬럼에 설정하며 행이 많을 때 설정하는 것이 효율적
  1. 유니크 인덱스(UNIQUE INDEX) : PRIMARY KEY 제약조건이나 UNIQUE 제약조건에 의해 자동으로 생성되는 인덱스
  2. 비유니크 인덱스(NONUNIQUE INDEX) : 사용자가 컬럼을 이용하여 수동으로 생성하는 인덱스

✔ 인덱스 확인

USER_INDEXES : 인덱스 정보를 제공하는 딕셔너리
USER_IND_COLUMNS : 컬럼 인덱스 정보를 제공하는 딕셔너리

EX) SELECT C.INDEX_NAME,COLUMN_NAME, UNIQUENESS FROM USER_INDEXES I JOIN USER_IND_COLUMNS C ON I.INDEX_NAME=C.INDEX_NAME WHERE C.TABLE_NAME='USER3';

✔ 비유니크 인덱스 생성 :

CREATE INDEX 인덱스명 ON 테이블명(COLUMN);

✔ 비유니크 인덱스 삭제 :

DROP INDEX 인덱스명
  > 유니크 인덱스는 PRIMARY 제약조건이나 UNIQUE 제약조건을 삭제하면 같이 삭제

📕 동의어(SYNONYM)

오라클 객체를 다른 이름으로 설정하여 사용하기 위한 객체

  • 전용 동의어 : 특정 사용자만 사용할 수 있는 동의어 - 일반 사용자에 의해 관리
    - 공용 동의어 : 모든 사용자가 사용할 수 있는 동의어 - 관리자에 의해 관리

✔ 동의어 생성

CREATE [PUBLIC] SYNONYM 동의어 FOR 객체명

	> PUBLIC : 공용 동의어를 생성하기 위한 키워드 

✔ 테이블목록 확인 - USER_TABLES 딕셔너리 사용

✔ USER_TABLES 딕셔너리 : SYS 계정 뷰에 접근하는 방법 - 사용자 스키마를 이용하여 접근

사용자명.테이블명 또는 사용자명.뷰이름

✔ SYS.USE_TABLES 객체의 공용 동의어로 USER_TABLES 생성하여 제공

SELECT TABLE_NAME FROM SYS.USER_TABLES;

✔ SYS.USER_TABLES 객체의 공용 동의어로 TABS 생성하여 제공

SELECT TABLE_NAME FROM TABS 

🔷 EX)) 시스템 관리자(SYSDBA - SYS계정)로 접속하여 현재 접속 사용자 SCOTT 에게 동의어에 대한 시스템 권한 부여

GRANT CREATE SYNONYM TO SCOTT;

시스템 관리자에게 동의어에 대한 시스템 권한을 부여 받은 후 동의어 관련 명령 사용 가능
	CREATE SYNONYM BONUS FOR COMM(TABLE NAME) ; 

✔ 동의어 확인

USER_SYNONYMS : 동의어 관련 정보를 제공하는 딕셔너리

SELECT TABLE_NAME, SYNONYM_NAME, TABLE_OWNER FROM USER_SYNONYMS WHERE TABLE_NAME ='COMM'

✔ 동의어 삭제

DROP [PUBLIC] SYNONYM 동의어

0개의 댓글