사용자 생성 및 권한 설정
-- quota 할당량은 무제한
create user user03 identified by "oracle"
default tablespace myts
quota Unlimited on myts;
--사용자 설정 권한 부여
GRANT CONNECT , RESUMABLE TO USER03;
-- 이것은 테이블 스키마
CREATE TABLE T100 (
C NUMBER(6)
);
GRANT INSERT ON T100 TO USER03;
-- 타인의 테이블에 데이터 삽입, 여기서 SYSTEM은 타인의 아이디
-- INSERT INTO 사용자명.T100.VALUES(1); : 사용자명을 스키마라고 칭함
INSERT INTO SYSTEM.T100.VALUES(1);
DESC SYSTEM.T100;
-- SELECT 권한 부여
GRANT SELECT ON T100 TO USER03;
SELECT * FROM T100;
SELECT * FROM SYSTEM.T100;
-- 커밋을 안하면 상대방이 삽입하였던 값을 상대방은 볼수 없다.
COMMIT;
-- USER03이 값을 업데이트 할수 있는 조장에게 모든 권한 요청(CMD 창)
GRANT ALL ON T100 TO USER03;-- 특정사용자에게만 all 권한 부여
GRANT ALL ON T100 TO TO PUBLIC; -- 모든 사용자에게 ALL 권한 부여
-- 모든 권한 삭제
-- 모든 사용자에게 권한 삭제
REVOKE ALL ON T100 FROM PUBLIC;
-- (X) 요렇게 권한은 안됨
REVOKE ALL ON T100 FROM USER03;
-- 도스창에서 c테이블에 1 증가시킴
update system.t100 set c=c+1;
select * from system.t100;-- 도스창에서 결과 확인하고
select * from t100;-- 이 창에서 조장도 결과확인
commit; -- 트랜젝션 종료
-- USER03 사용자 삭제 : system권한에서
DROP USER USER03 CASCADE;
-- 도스창에서 user03에 대한 비번 변경하기
alter user user03 identified by "oracle03"
-- 도스창 접속해제
disconn;
------------------------------------------------------
-- 접속중인 세션보기
select sid, serial#, username from v$session;
-- USER03 세션 강제해제 ( 'SID, SERIAL#' 입력 )
alter system kill session '142,61';
DROP USER USER03 CASCADE;
------------------------------------
-- autocommit 설정
set autocommit on;
-- autocommit 해제
set autocommit off;
--------------------------------------
-- 데이터 딕셔너리 ( 자료사전 )
-- DESC 명령어로 데이터 딕셔너리 뷰 USER_TABLES의 구조
desc user_tables;
select table_name
from user_tables
order by table_name desc;
-- limit 1. 한계(점), 한도 2. (허용 한도에 대한) 제한, 허용치
-- 컬럼값 = limit
-- 인라인뷰는 SQL 문 내부에 뷰를 정의하고 이를 테이블처럼 사용함.
/*
SELECT ROWID, ROWNUM, EMPNO, ENAME, HIREDATE
FROM EMP;
SELECT EMPNO, ENAME, HIREDATE
FROM EMP
ORDER BY HIREDATE;
SELECT ROWNUM, EMPNO, ENAME, HIREDATE
FROM EMP
ORDER BY HIREDATE;
CREATE OR REPLACE VIEW VIEW_HIRE
AS
SELECT EMPNO, ENAME, HIREDATE
FROM EMP
ORDER BY HIREDATE;
SELECT ROWNUM, EMPNO, ENAME, HIREDATE
FROM VIEW_HIRE;
SELECT ROWNUM, EMPNO, ENAME, HIREDATE
FROM VIEW_HIRE
WHERE ROWNUM<=5;
SELECT ROWNUM, EMPNO, ENAME, HIREDATE
FROM ( SELECT EMPNO, ENAME, HIREDATE
FROM EMP
ORDER BY HIREDATE)
WHERE ROWNUM<=5;
*/
/*
인라인 뷰를 사용하여
급여를 많이 받는 순서대로
3명만 출력하는 뷰(SAL_TOP5_VIEW)를 작성하시오.
*/
-- 뷰를 생성할 때 ROWNUM과 같은 가상 컬럼을 사용하려면
-- 사용자가 반드시 별명을 따로 설정해야 한다.
select ename, sal from emp order by sal desc;
select rownum, ename, sal from (select ename, sal from emp order by sal desc)
where rownum<=3;
-- rownum 은 오라클이 만든 가상 컬럼이므로 뷰에 올수 없음. 따라서 가상의 별명을 지정해야함
create or replace view SAL_TOP5_VIEW
as
select rownum "급여 순위", ename, sal
from (select ename, sal from emp order by sal desc)
where rownum<=3;
select * from sal_top5_view;-- 뷰(sal_top5_view)로 검색
-- 14장 28 페이지 참조