Daily Codig Reminder
뷰, 시퀀스, 시노님
char1ie
2023. 11. 23. 11:12
- 단순뷰
- 함수를 사용하는 경우에는 별칭부여해야
create view emp_view4
as select deptno, sum(sal) 총합
from emp group by deptno;
- 단순뷰로 생성시 dml 작업도 가능
create view emp_view5
where deptno = 10;
-> view 에서 바꾼거는 emp 에도 적용 - 복합뷰
- 두개이상의 기본테이블에 대해서 정의(조인..) - with check
데이터의 무결성을 위해 기본키 또는 null 조건을 사용
create view emp_view6
as select empno, ename, sal, deptno
from emp where deptno = 30;
update emp_view6
set deptno = 40
where empno = 7499;
-> 7499사원의 부서번호를 40으로 변경
뷰에서 7499 사원이 빠지고 emp 테아블에서 40번으로 변경됨.
뷰에 대해서 dml문이 수행되는 것을 where 조건에 일치하는 데이터만 변경하게 제거
create view emp_view6
as select empno, ename, sal, deptno
from emp where deptno=30
with check option;
update emp_view6
set deptno = 40
where empno=7499;
->오류 - with read only
뷰를 통한 dml 작업 불거능
create view emp_view6
as select empno, ename, sal, deptno
from emp
with read only; - drop
drop view emp_view6;
->뷰만 날아감
시퀀스★★★★★
- 호출 될 때마다 자동으로 유일한 숫자를 생성
테이블의 특정 컬럼값을 넘버링 - 문법:
CREATE SEQUENCE 시퀀스명
[ START WITH n]
[ INCREMENT BY n] [ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE n | NOCACHE] - start with n
시퀀스번호의 시작값 지정
만일 10부터 시작되는 시퀀스를 생성하려면 start wth 으로 지정하면되고 생략시 1부터 시작함 - increment by n
연속적인 시퀀스 번호의 증가치를 지정할 때 사용됨
만일 2씩 증가 -> increment by 2
음수값 설정가능, 생략시 1씩 증가 - MAXVALUE n
최대값을 지정 - MINVALUE n
최소값을 지정
CYCLE-> 새로 시작하는 값 역할 - cycle
지정된 시퀀스값이 최대값까지 커지면 minvalue 값부터 다시시작.
NOCYCLE은 증가가 완료되면 에러 - cache
생략시 기본적으로 20개를 생성, NOCACHE는 필요할 때마다 매번 시퀀스 값을 계산해서 반환
데이터베이스를 종료하고 다시 사용할 경우에는 전에 썼던 시퀀스 값을 사용하지 못함 - 시퀀스 생성
create sequence dept_deptno_seq.nextval
start with 10
increment by 10
maxvalue 100
minvalue 5
cycle
nocache;
- NEXTVAL 과 CURRVAL
select dept_deptno_seq.nextval from dual;
→ 102030405060708090100 5152535455565758595
select dept_deptno_seq.currval from dual;
→ 현재값을 확인할 때 씀.
create sequence dept_deptno_seq2 start with 100 — 100에서시작
increment by -10 — -10씩
maxvalue 150 — 10이되면 150에서 다시시작
minvalue 10 — 최저값이 10
cycle nocache; - 시퀀스 수정
- ALTER SEQUENCE문을 사용하여 증가치,최대값,최소값,CYCLE여부,캐시값 을 변경
- START WITH옵션은 변경이 불가능하기 때문에 필요시 시퀀스를 삭제하고 재 생성
→ drop쓰고 재생성하라는 뜻.
- 문법:
ALTER SEQUENCE 시퀀스명
[ INCREMENT BY n] [ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE n | NOCACHE]
create sequence dept_deptno_seq3;
alter sequence dept_deptno_seq3
increment by 10 — 증가값 수정
cycle; — 사이클 활성
→ 기본값으로 설정된 시퀀스를 증가값 10, CYCLE 여부는 Y로 수정하기 위해
ALTER SEQUENCES문을 사용하는 SQL문 - 테이블에 시퀀스 값 저장.
create table dept06 (deptno number(4) primary key, dname varchar2(15), loc varchar2(15) );
→ 테이블 생성
create sequence dept_deptno_sq4 start with 10 increment by 10 nocycle; → 시퀀스 생성
★★★★★
insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '개발', '서울');
insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '인사', '경기');
insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '관리', '부산');
동의어 (synoym)
- 데이터 베이스 객체에 대한 별칭. 객체에 대한 접근방법 단순화.
- select * from scott.dept;
→scott.dept 를 별칭으로 바꿔서 씀. - 문법:
CREATE [PUBLIC] SYNONYM 동의어
FOR 스키마.객체; - 계정만들기
create user tester IDENTIFIED by tester;
grant connect , resource to tester;
→ 권한부여 sys에서
alter user tester identified by tester;
→ 6개월마다 비밀번호 바꾸는 키 - grant select on dept to tester;
→ 테스터에 스콧 dept에 select할 수 있는 권한 부여 - 시노님만들기
—SYS
GRANT create synonym TO scott;
--tester 계정
CREATE SYNONYM dept_synonym FOR scott.dept; - 동의어 삭제
-tester 에 drop synonym dept_synonym;
인덱스
- select * from emp where ename= 'SMITH';
→ ename을 인덱스로 쓰기위한 준비 - CREATE INDEX emp_ename_idx ON emp(ename);
→ 인덱스 생성
사용자관리
- 계정:
사용자 (sys가 추가) ⇒ 권한부여 (sys가 부여 grant 및 회수 가능 revoke ) - role : 권한의 묶음
- scott ⇒ tester 권한부여
grant select on dept to tester;
grant insert on dept to tester;
grant update on dept to tester;
grant delete on dept to tester; - user_grant 롤 생성
grant select on dept to tester;
grant insert on dept to tester;
grant update on dept to tester;
grant delete on dept to tester;
grant user_grant to tester;
→ 4개를 한꺼번에 부여.
- 권한
오라클 데이터베이스에서의 권한은 특별한 SQL문을 실행할 수 있는 권리를 의미
시스템/객체
CREATE SESSION 접속
CREATE TABLE 테이블을 생성
CREATE SEQUENCE 시퀀스를 생성
CREATE VIEW 뷰를 생성
CREATE PROCEDURE PL/SQL의 프로시저를 생성
문법
GRANT 시스템권한[,시스템권한]
TO 사용자계정|role|PUBLIC;
GRANT create session,create table,unlimited tablespace(테이블자리) TO user01;
→ sys aka관리자 계정에서 해야.
select * from session_privs;
→시스템 권한 조회
REVOKE 시스템권한[,시스템권한] FROM 사용자계정|role|PUBLIC;
→권한회수
REVOKE create session FROM user01;
→ sys 에서
create table dept (deptno number(4) primary key, dname varchar2(15), loc varchar2(15));
→ 테이블 생성
GRANT select,insert ON dept TO user01;
→scott 계정에서 권한 부여
select * from user_tab_privs_made;
→ scott 계정이 유저01에게 부여한 권한 확
REVOKE INSERT ON DEPT FROM USER01;
→ scott 정에서 해랴함.
- 롤
- 사용자에게 보다 효율적으로 권한을 부여할 수 있도록 여러 개의 권한을 묶어 놓은 것
- 종류 select role from dba_roles;
→ role 찾기 - SYS 에서
create user user03 IDENTIFIED by user03;
create role clerk;
grant create session , create table, UNLIMITED tablespace to clerk;
grant select on scott.dept to clerk;
grant clerk to user03;
- 종류 select role from dba_roles;