오늘 아침에 일어나서 폰을 확인해 보니  업데이트 알림이 왔습니다. 

기다리던 업데이트라 기대반 설레임반 즐겁게 업데이트를 눌렀지요..

시간은 제법 걸렸습니다. 뭐 4.4.3 버전에서도 달빅을 버리고 art모드로 사용했었는데요..

업데이트를 하니 art모드로 모든 앱들을 재컴파일을 하더군요. ^^ 

속도는 4.4.3 버전에서도 충분히 빨랐지만요.. 5.0으로 업데이트 되니 반응속도가 더욱 빨라졌습니다 ^^

그럼 사진을 보시죠 ^^ 


깔끔해진 배경화면


앱화면은 흰색 배경에 올라오는데 검정배경이었다가 흰색으로 변경되어 이부분은 적응좀 해야겠어요.

팝업창은 이쁘게 변했구요. 

위에 두번 내리면 아래와 같은 창이 뜨는데요 손전등이 추가된것을 알수 있습니다. 이제 손전등 위젯은 안녕~

흰색배경은 여전히 적응기를 거쳐야할거 같네요 혹시 설정하는게 있는지 알아봐야겠습니다.

안드로이드 버전을 누르니 이런게 나오네요 ^^ 이쁩니다. 



앱 업데이트 화면이고요.. 쿠키런은 사랑입니다.



피트니스 앱 및 기기가 추가되었는데요.. ^^ 갤럭시 기어 시장을 더 키우고 싶다면 여기에 등록되어야 할텐데.. 등록되나요? 전 불필요해서 산게 없네요 기어핏이 이쁘긴하지만.. 저에게 아직 필요가 없습니다. 

기기관리자 화면이고요. 온오프도 어떻게 보면 직관적이긴 한데 전 버튼으로 온오프가 더 정감가네요 아이폰이 이런 디자인이였던거 같은데 왜 따라했어-_-;;

구동했던 앱이 일자로 쭉 떴었는데 이렇게 나옵니다. 이쁘고 속도도 무지 빠르네요. 

데이터 사용량입니다. 와 2기가나 사용했네요 어떻게 이렇게 딱 맞췄징 ㅋ.ㅋ

아래는 메모리인데요 넥서스5 메모리 2기가인데 사용가능 용량이 1.2기가나 되네요 ^^ 무지 가볍습니다. 


이상 안드로이드 5.0 롤리팝을 살펴보았습니다. 



'이것저것' 카테고리의 다른 글

군함도 송중기  (0) 2017.07.30
우엉차 효과 효능 다이어트 우엉  (0) 2014.12.01
눈밑떨림증상 영양부족.  (0) 2014.11.11
무료 파일복구 프로그램  (0) 2014.11.07
마테차 효능 효과 마시는법  (0) 2014.10.28
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

오라클 PL/SQL 후.

Oracle 2014. 11. 14. 09:38

PL/SQL - Oracle's Procedural Language extension to SQL  

SQL문장에서 변수 정의, 조건 처리(IF),반복처리(LOOP, WHILE,FOR)등을 지원하며, 오라클 내부에 절차적 언어로서(Procedure Language)로서 SQL의 단점을 보완

1.변수 선언할수 있음

2.비교 처리할수 있음

3.반복 처리할수 있음

PL/SQL 은 PASCAL 유사한 구조로 DECLARE~BEGIN~EXCEPTION~END순서를 갖는다. PL/SQL은 블록(BLOCK)구조의 언어로서 3부분을 나뉨

1. DECLARE SECTION(선언부)

2. EXECUTABLE SECTION(실행부)

3. EXCEPTION SECTION(예외 처리부)

1.선언부 (DECLARE SECTION)

   PL/SQL 에서 사용되는 모든 변수나 상수를 선언하는 부분 DECLARE로 시작

2. 실행부(EXECUTABLE SECTION)

   절차적 형식으로 SQL문을 실행할 수 있도록 절차적 언어의 요소인 제어문,반복문,함수 정의 등 로직을 기술할 수 있는 부분으로 BEGIN으로 시작.

3. 예외처리분(EXCEPTION SECTION)

   PL/SQL문이 실행되는 중에 에러가 발생할 수 있는데 이를 예외 사항이고 이런 예외사항을 해결하기 위한 문장을 기술할 수 있는 부분으로 EXCEPTION으로 시작


PL/SQL 작성요령

  - 블록내에서는 한문장이 종료될 때 마다 세미클론(;) 을 사용

  - END뒤에 ; 사용하여 하나의 블록이 끝났다는것을 명시

  - 블록은 파일로 작성할수도 있고프롬프트에서 바로 작성할수도 있음

  - SQL*PLUS 환경에서는 DELCLARE나 BEGIN이라는 키워드로 PL/SQL 블록이 시작하는 것을 알수 있다. 

  - 단일행 주석은 --이고 여러행 주석은 /* */ 이다. 

  - 쿼리문을 수행하기 위해서 /가 반드시 입력되어야 하며 PL/SQL블록은 행에 /가 있으면 종결된 것으로 간주 

-----------------------------------------

--간단한 소스.

SET SERVEROUTPUT ON;

DECLARE

BEGIN 

    DBMS_OUTPUT.PUT_LINE('Hello PL/SQL!');

END;

/

-------------------------------------------


변수 선언 

VNO NUMBER(4);

VNAME VARCHAR2(10);

VNO := 10;

VNAME := 'NICE';

예제)

------------------------------------------------

SET SERVEROUTPUT ON;

DECLARE

 VNO NUMBER(4);

 VNAME VARCHAR2(10);

BEGIN

 VNO := 7;

 VNAME := 'NICE';

 DBMS_OUTPUT.PUT_LINE('번호/이름');

 DBMS_OUTPUT.PUT_LINE('---------------------');

 DBMS_OUTPUT.PUT_LINE(VNO||'/'||VNAME);

END;

/

-------------------------------------------------------

아래의 예제는 이데이터를 기준으로 



스칼라 변수,레퍼런스 변수

스칼라 변수 는 일반적으로 그냥선언해서 쓰는 변수를 스칼라 변수

레퍼런스 변수는 이전엔 선언된 변수나 데이터베이스 컬럼에 맞추서 선언

레퍼런스변수 예제

--------------------------------------------------

SET SERVEROUTPUT ON;

DECLARE

VTEST TEST_02%ROWTYPE; //변수의 컬럼을 그대로 가져옴. 

BEGIN

    VTEST.NO:=10;    //이렇게 변수를 사용하지.

    DBMS_OUTPUT.PUT_LINE(VTEST.NO); //쉽징?

END;

/

-----------------------------------------------------

SELECT INTO

- DB에 있는 값을 변수에 대입할수 있음. 

예제소스 

---------------------------------------------------------

SET SERVEROUTPUT ON;

DECLARE

VTEST TEST_02%ROWTYPE;

BEGIN

    SELECT * INTO VTEST

    FROM TEST_02

    WHERE NO=2;

    DBMS_OUTPUT.PUT_LINE(VTEST.NO);

    DBMS_OUTPUT.PUT_LINE(VTEST.ADDRESS);

END;

/



---------------------------------------------------------------
그러나 쿼리문으로 단일데이터만 받기만하는건 아닐터 
테이블 type;
이건 배열이라고 보면 되겠음. 
---------------------------------------------------------------
SET SERVEROUTPUT ON;
DECLARE
--테이블 타입 정의 --
TYPE TEST_02_TABLE IS TABLE OF TEST_02.NO%TYPE INDEX BY BINARY_INTEGER;
--테이블 타입으로 변수를 선언 
VTEST_T TEST_02_TABLE;
I BINARY_INTEGER:=0;--테이블 인덱스정보 I를 인티저로 선언하고 0을 대입
BEGIN 
--테이블내용 DB가져오기
FOR K IN(SELECT * FROM TEST_02) LOOP
I:=I+1;--인덱스를 1증가 
VTEST_T(I):=K.NO;
END LOOP;
--테이블 내용 출력
FOR J IN 1..I LOOP
    DBMS_OUTPUT.PUT_LINE(RPAD(VTEST_T(J),10));
END LOOP;
END;
/



-------------------------------------------------------------------


RECORD TYPE

TABLE TYPE은 한가지 데이터만 읽어오므로 테이블의 ROW를 읽어올땐 TABLE TYPE를 여러개 선언하여야 한다.

이걸 한번에 읽어올수 있는게. 있는데 에게봐라 RECORD TYPE다. 


IF ~THEN~END IF

IF(VNO=10) THEN 

VNAME='3434';

END IF;

선택문이였고

IF ~ THEN ~ELSE~END IF

IF(VNO=19) THEN

VNAME='11919';

ELSE

VNAME='3939';

END IF;

이것은 IF ELS문이고

IF~THEN ~ELSIF ~THEN ~END IF

이런문도 있음

LOOP

EXIT;

END LOOP;

루프이고.. 

FOR문은

FOR N IN 1..5 LOOP

PRINT N;

END LOOP


WHILE

WHILE N<=5 LOOP

 N

END LOOP;




블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

오라클 동의어

Oracle 2014. 11. 13. 18:15

사용자가 다른사용자의 객체를 사용할땐 사용자명.객체명 을 사용하였으나 이것역시 편란한게 있떠라 동의어라는 인터페이스를 제공(SYNONYM,시노늄)

비공개동의어 - 객체에 대한 접근 권한이 있는 사용자가 정의한 동의어로 해당사용자만 사용

공개동의어 - 권한을 주는 사용자가 정의한 동의어로 누구나 사용 공개동의어는 DBA권한을 가진 사용자만이 생성 SYNONYM앞에 PUBLIC를 붙여서 생성. 


비공개동의어 생성

EX) CREATE SYNONYM  동의어 FOR user_id.table;

공개동의어 생성

EX) CREATE PUBLIC SYNONYM 동의어 FOR user_id.table;

동의어 삭제

비공개 동의어와 공개동의어는 PUBLIC 를 생성때 넣고 안넣고 차이가 있기때문에 삭제때도 PUBLIC의 유무가 필요함.

비공개 

EX) DROP SYNONYM 동의어;

공개동의어 

EX) DROP PUBLIC SYNONYM 동의어;



블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

롤이란 사용자에게 권한부여를 쉽고 효과적으로 하기위해 사용함.

오라클에서 정의된 롤

 CONNECT 롤 - 데이터베이스에 접속할수 있도록 가장 기본적인  시스템 권한 8가지

ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM,CREATE TABLE , CREATE VIEW

RESOURCE 롤 - 테이블,뷰,인덱스등 객체를 생성할수 있는 권한

CLUSTER,CREATE PROCEDURE,CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER

DBA롤 -시스템 관리에 필요한 모든권한과 시스템 자원을 무제한으로 사용가능한 권한,사용자를 작성 변경 제거할수 있는 권한 여하튼 못하는게 없음.

관리자 권한으로 명령을 내려야함

EX) GRANT CONNECT,RESOURCE TO user_id//이러면 위의권한을 가짐.

딕셔너리 명 

설명 

ROLE_SYS_PRIVS 

롤에 부여된 시스템 권한 

ROLE_TAB_PRIVS 

롤에 부여된 테이블 관련 권한

USER_ROLE_PRIVS 

접근 가능한 롤

USER_TAB_PRIVS_MADE 

해당 사용자 소유의 오브젝트에 대한 오브젝트 권한 

USER_TAB_PRIVS_RECD 

사용자에게 부여된 오브젝트 권한 

USER_COL_PRIVS_MADE 

사용자 소유의 오브젝트 중 칼럼에 부여된 오브젝트 권한

USER_COL_PRIVS_REDC 

사용자에게부여된 특정 컬럼에 대한 오브젝트 권한


사용자 롤 정의

1.롤 생성

2.롤에 권한 부여

3. 사용자에게 롤 사용

EX) CREATE ROLE role_name;

EX) GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO role_name;

EX) GRANT role_name TO USER_NAME ;

...특정 객체의권한일때

EX) GRANT OBJECT_PRIV TO role_name;


롤을 부여하였다면 이제 롤의 회수와 제거에대해서 알아보자

REVOKE - 회수 

EX) REVOKE role_name FROM user_id;

drop - 삭제

DROP ROLE role_name;





'Oracle' 카테고리의 다른 글

오라클 PL/SQL 후.  (0) 2014.11.14
오라클 동의어  (0) 2014.11.13
오라클 데이터베이스 보안 과 권한  (0) 2014.11.13
인덱스 INDEX  (0) 2014.11.13
시퀸스 SEQUENCE  (0) 2014.11.13
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

데이터 베이스에 저장된 정보를 다수의 사용자가 공유합니다. 정보의 유출이나 불법적인 접근을 방지하기위해 철저한 보안수단이 필요합니다. 보안 대책을 위해서 데이터 베이스 관리자가 있어야 합니다. 

권한의 종류와 역할

데이터 베이스 관리자가 가지고 있는 권한

시스템 권한 

기능 

CREATE USER  

사용자를 새롭게 생성하는 권한 

DROP USER 

사용자를 삭제하는 권한 

DROP ANY TABLE 

임의의 테이블을 삭제할 수 있는 권한 

QUERY REWRITE 

함수 기반 인덱스를 생성하는 권한 

BACKUP ANY TABLE  

임의의 테이블을 백업할 수 있는 권한 


데이터 베이스를 관리하는 권한 (관리자가 사용자에게 부여하는 권한)


시스템 권한 

기능 

CREATE SESSION 

데이터베이스에 접속할수 있는권한 

CREATE TABLE 

사용자 스키마에서 테이블을 생성할수 있는 권한 

CREATE VIEW 

사용자 스키마에서 뷰를 생성할 수 있는 권한 

CREATE SEQUENCE 

사용자 스키마에서 시퀸스를 생성할 수 있는 권한 

CREATE PROCEDURE 

사용자 스키마에서 함수를 생성할수 있는 권한 


사용자 생성하기

일단 관리자 계정으로 접속한다.

EX) CREATE USER user_id IDENTIFIED BY user_pass;

//접속을 시도해보면 접속할수 없다. 계정만 생성하고 권한을 부여하지 않았다. 

GRANT 권한부여

EX) GRANT CREATE SESSION TO user_id;

//접속만 가능할뿐 테이블에 대한 권한을 받지 못했다. 

ex) GRANT CREATE TABLE user_id;

//그래도 여전히 생성되지 않는다. 이유는 공간을 활당받지 못했기 때문이다. 그럼 공간을 할당해보자

EX) ALTER USER user_id QUOTA 2M ON USERS;

 WITH ADMIN OPTION - 사용자에게 시스템 권한을 부여하면 그사용자는 데이터 베이스 관리자가 아님에도 자신이 부여받은 권한을 다른 사용자에게 부여할수 있는 권한도 함께 부여 받는다. 

EX) GRANT CREATE SESSION TO user_id WITH ADMIN OPTION;


객체권한 - 다음은  객체와 권한 설정할 수 있는 명령어를 매핑시켜 놓은 표.


권한 

TABLE 

VIEW 

SEQUENCE 

PROCEDURE 

 ALTER

 

 

DELETE 

 

 

EXECUTE 

 

 

 

INDEX 

 

 

 

INSERT 

 

 

REFERENCES 

 

 

 

SELECT 

 

UPDATE 

 

 


객체를 만든 사람이 다른 유저에게 권한을 주고 싶다면 

EX) GRANT SELECT ON table_name TO user_id;

 스키마란 -  객체를 소유한 사용자명 //

객체를 소유하지 않은 자가 다른 사용자의 테이블을 접근할땐 이렇게

ex) SELECT * FROM user_id.emp ;//그사람의 아디뒤에 .을찍고 테이블명 적음.

사용자에게 부여된 권한 조회나 자신에게 부여된 사용자권한을 알고 싶을때.

EX) SELECT * FROM USER_TAB_PRIVS_MADE;//사용자가 부여한 권한을 조회

EX) SELECT * FROM USER_TAB_PRIVS_RECD; //나에게 부여된 권한 조회 

사용자에게 권한을 회수해야할때.. 

REVOKE-사용자에게 권한을 제거함

EX) REVOKE SELECT ON table_name FROM user_id;//테이블이름과 유저 명을 적으면 그테이블에 대한 권한을 회수함. 

WITH GRANT OPTION - 사용자에게 객체권한을  WITH GRANT OPTION 과 함께부여하면 사용자는 객체를 

EX) GRANT SELECT ON SCOTT.EMP TO USER02 WITH GRANT OPTION;//사용자 객체의 권한을 다음 사용자도 권한을 줄수있게됨. 




'Oracle' 카테고리의 다른 글

오라클 동의어  (0) 2014.11.13
오라클 롤 권한을 일일이 부여하지 않고 묶음 패키지 관리자가 정의도 가능  (0) 2014.11.13
인덱스 INDEX  (0) 2014.11.13
시퀸스 SEQUENCE  (0) 2014.11.13
가상 테이블 뷰  (0) 2014.11.13
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

인덱스 INDEX

Oracle 2014. 11. 13. 16:04

INDEX - 인덱스의 내부구조는 B* 트리 형식으로 구성, 검색속도의 향상

장점 - 검색 속도가 빨라짐 ,시스템 부하를 줄여 전체성능을 향상

단점 - 추가공간 필요,인덱스생성 시간 발생,데이터 변경작업(INSERT/UPDATE/DELETE)자주 일어날 경우 오히려 성능저하

INDEX는 기본키나 유일키 를 지정하면 자동으로생성 (USER_COLUMNS,USER_IND_COLUMNS 데이터 딕셔너리 뷰에저장)

INDEX 정보 보는예

EX) SELECT INDEX_NAME , TABLE_NAME, COLUMN_NAME

FROM USER_IND_COLUMNS

WHERE TABLE_NAME_IN('EMP','DEPT');

오라클 검색 시간 측정

EX) SET TIMING ON ;결과도출 시간 나옴.

인덱스 생성법

형식 CREATE INDEX index_name ON table_name(column_name)

인덱스 삭제

형식 DROP INDEX index_name;

인덱스 생성 명령

ex) CREATE INDEX IDX_EMP01_ENAME ON EMP01(ENAME);

EX) SELECT DISTINCT EMPNO,ENAME FROM EMP01 WHERE ENAME='SYJ'//생성시 속도가 짦아졌음을 알수 있음. 

EX) DROP INDEX IDX_EMP01_ENAME; //생성한 인덱스를 삭제

인덱스의 사용할때와 말아야할때


 인덱스를 사용

인덱스를 사용하지 말아야할떄 

 테이블의 행의 수가 많을때

테이블에 행의수가 적을때 

WHERE문에 해당 컬럼이 많이 사용될떄 

WHERE문에 해당 컬럼이 자주 사용되지 않을때 

검색 결과가 전체 데이터의 2~4%일때 

검색 결과가 전체 데이터의 10~15%일떄 

JOIN에 자주 사용되는 컬럼이나 NULL을 포함하는 컬럼이 많을때 

테이블에 DML작업이 많은경우(INSERT,DELETE,UPDATE) 

인덱스는 재생성 시켜주기전까지 기존 인덱스 정보를 빈공간으로 가지고있게 된다. 

재생성 명령

형식 ALTER INDEX index_name REBUILD;

EX)ALTER INDEX IDX_EMP01_DEPTNO REBUILD;

인덱스의 종류 

고유와 비고유 

고유 - 중복된 데이터가 없는 단일 데이터에만 선언

비고유 - 중복된 데이터가 있는 경우

형식 CREATE UNIQUE INDEX index_name ON table_name(column_name);

ex) CREATE UNIQUE INDEX IDX_DEPT01_DEPTNO ON DEPT01(DEPTNO);

한개의 컬럼으로 구성한 INDEX는 단일인덱스 두개이상의 컬럼으로 구성할시 결합 인덱스 라함.

EX) CREATE INDEX IDX_DEPT01_COM ONDEPT01(DEPTNO,DNAME);

함수기반인덱스 

EX) CREATE INDEX IDX_EMP01_ANNSAL ON EMP01(SAL*12);//검색조건이 SAL*12일때 해당 인덱스를 탐





블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

시퀸스 SEQUENCE

Oracle 2014. 11. 13. 15:09

SEQUENCE - 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기, 시퀴스를 기본키로 사요앟면 사용자의 부담은 줄어듬. 

[형식] 

CREATE SEQUENCE sequence_name

[START WITH n]     //시퀸스 번호의 시작값

[INCREMENT BY n]  // 증가 값 

[{MAXVALUE n | NOMAXVALUE}] //시퀸스가 가질수 있는 최대값

[{MINVALUE n | NOMINVALUE}] //시퀸스가 가질수 있는 최소값 지정

[{CYCLE | NOCYCLE}]  //시퀸스 값이 최대갑증가를 완료하면 시작값으로 다시 시작

[{CACHE n | NOCACHE}]  //시퀸스의 기본값 20 , 윈칙적으로 메모리상에서 시퀸스 관리하지 않음


생성된 정보는 USER_SEQUENCE 에 저장됨

EX) DESC USER_SEQUENCES;

CURRVAL - 현재의 값을 가져옴

NEXTVAL - 다음값을 생성하여 그값을 CURRVAL 로 대처하고 값을 가져옴

EX) SELECT sequence_name.NEXTVAL FROM DUAL ;//증가한값//

EX) SELECT sequence_name.CURRVAL FROM DUAL;//현재값

주의사항)

사용할수 있는예

1.서브쿼리가 아닌 SELECT문

2.INSERT문의 SELECT절

3.INSERT문의 VALUE절

4.UPDATE문의 SET절

사용할수 없는 예

1.VIEW의 SELECT절

2.DISTINCT 키워드가 있는 SELECT문

3.GROUP BY,HAVING,ORDER BY절이 있는 SELECT문

4.SELECT.DELETE.UPDATE의 서브쿼리

5.CREATE TABLE,ALTER TABLE 명령의 DEFAULT값

사용시 겪는 문제

새로만든 SEQUENCE에 NEXTVAL을 사용하지 않고 바로 CURRVAL을 사용할시 NEXTVAL로 값을 생성하여 CURRVAL로대처하지 않았기때문에 값이 없어 오류가 남.반드시 NEXTVAL 사용후 사용할것.\

SEQUENCE 삭제

ex) DROP SEQUENCE sequence_name 

SEQUENCE 수정

EX) ALTER SEQUENCE sequence_name MAXVALUE 1000;





'Oracle' 카테고리의 다른 글

오라클 데이터베이스 보안 과 권한  (0) 2014.11.13
인덱스 INDEX  (0) 2014.11.13
가상 테이블 뷰  (0) 2014.11.13
오라클 데이터 읽기의 일관성과 락.  (0) 2014.11.12
오라클 트랜잭션 관리 ㅋ.ㅋ  (0) 2014.11.12
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

가상 테이블 뷰

Oracle 2014. 11. 13. 10:52

뷰는 simple view, comples view 두종류로 나뉜다. 

뷰의 정의 하기 

CREATE OR REPLACE VIEW -뷰를 만들때 CREATE VIEW 만 사용해도 되나 CREATE VIEW명령어로 만들어진 뷰는 구조를 바꾸려면 뷰를 삭제하고 다시 만들어야 하지만 , CREATE OR REPLACE VIEW 는 새로운 뷰를 만들수 있을뿐만 아니라 기존의 뷰를 새로운 구조의 뷰료 변경할수 있다. 보통 CREATE OR REPLACE VIEW 를 사용


FORCE | NOFORCE - RORCE를 사용하면 기본 테이블의 존재 여부에 상관없이 뷰를 생성

WITH CHECK OPTION - 해당 뷰를 통해서 볼수 있는 범위 내에서만 UPDATE 또는 INSERT가 가능합니다. 

WITH READ ONLY - 해당뷰를 통해서 SELECT 만 가능하면 INSERT/UPDATE/DELETE를 할수 없게 됩니다. 만약 이것을 생량하여 뷰를 사용하면 추가,수정,삭제(INSERT/UPDATE/DELETE)가 모두 가능


SELECT문을 사용하여 VIEW를 생성해보는 예

EX) CREATE VIEW EMP_VIEW30

AS

SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP_COPY WHERE DEPTNO=30; //30번 부서에 소속된 사람의 사번,이름,월급,부서번호의 값을 가진 VIEW를 생성

EX) SELECT * FROM EMP_VIEW30; //뷰의 내용을 볼수 있음. 

#만약 뷰를 생성할 권한이 없을시 시스템 계정으로 접속하여 권한을 유저에게 부여해줍니다. 

EX) CONN SYSTEMID/SYSTEMPASS;

EX) GRANT CREATE VIEW TO USER;//USER에 사용자 계정

생성한 VIEW는 물리적으로 저장하지 않고 명령어로 뷰를 정의할때 기술한 쿼리문장 자체를 저장합니다. 뷰를 정의 할때 기술한 쿼리문이 궁금하다면 USER_VIEWS테이블의 TEXT컬럼값 확인

EX) DESC USER_VIEWS;

EX) SELECT VIEW_NAME, TEXT FROM USER_VIEWS;


#뷰의 동작원리 

1. 사용자가 뷰에 대해서 질의를 하면 USER_VIEWS에서 뷰에 대한 정의를 조회합니다. 

2. 기본 테이블에 대한 뷰의 접근 권할을 살핌 

3. 뷰에 대한 질의의 기본 테이블에대한 질의로 변환

4. 기본 테이블에 대한 질의를 통해 데이터를 검색

5. 검색된 결과를 출력

ex) SELECT * FROM 뷰네임 // 뷰네임은 쿼리문이 저장된 TEXT문의 값을 가져와 내부적으로 대처함 ;; 

뷰의 내용을 수정하면 실제 테이블의 값이 추가,수정,삭제 됨. 

 #뷰의 사용이유 

복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화할 수 있고 보안에 유리

SIMPLE VIEW와 COMPLEX VIEW 의 차이


 SIMPLE VIEW

 COMPLEX VIEW

 단일테이블

복수테이블 

 그룹함수 불가능

그룹함수 사용가능 

DISTINCT사용이 불가능 

DISTINCT 사용이 가능 

DML 사용가능 

DML 사용불가능 

DML-SELECT,UPDATE,DELETE 문

SIMPLE VIEW 경우 DML이 사용이 가능 하지만 예외로 사용못할조건이 있음

1.NOT NULL 제약 조건이 들어가 있는 경우 INSERT문 사용이 불가능

2. 뷰에 산술표현식(SAL*12)으로 정의된 가상의 컬럼이 있다면 INSERT,UPDATE 가 사용불가능

3. DISTINCT 를 포함한 경우에도 DML사용불가

4. 그룹함수나 GROUP BY절을 포함할 경우에도 DML명령 사용불가.

단순뷰컬럼에 별칭부여하가. 

EX) CREATE OR REPLACE 

VIEW EMP_VIEW(번호,이름,주소,취미)

AS 

SELECT NO,UNAME,ADDRESSS,HOBBY

FROM TEST_02;

EX)SELECT * FROM WHERE 번호=1 ; // 제정의된 컬럼명으로 검색됨. 단 테이블에 정의되었던 컬럼명으로는 사용안됨.. 사용시 에러뜸. 

EX) SELECT * FROM WHERE NO=1;//에러.. 


COMPLEX VIEW - 2개이상의 기본테이블에 의해 정의된 뷰 

사용용도 - 자주조인되는 테이블들이 있다면 매번 사용할때마다 조인 문을 매번 작성해서 사용해야됨.. 

EX) CREATE VIEW EMP_VIEW_DEPT

AS

SELECT E.EMPNO,E.ENAME,E.SAL,E.DEPTNO,D.DNAME,D.LOC

FROM EMP E. DEPT D

WHERE E.DEPTNO = D.DEPTNO

ORDER BY EMPNO DESC;

EX) SELECT * FROM EMP_VIEW_DEPT //쿼리문이 가독성좋아짐.


DROP VIEW VIEW_NAME - //뷰를 삭제 함. (뷰만 삭제하는거라 실제 데이터는 삭제되거나 영향을 주지 않음)


-----------뷰생성에 사용되는 옵션에 대해서 기술 ---------------------

OR REPLACE - CREATE VIEW로 뷰를 생성하였는데 컬럼을 추가 하거나 뺴고 싶다면 어떻게 해야 할까요 그때 필요한게 이옵션입니다. 만약 생성된 뷰가 없다면 새로 생성할것이고 생성된 뷰가 있다면 내용이 수정됩니다. 

EX) CREATE OR REPLACE VIEW EMP_VIEW30 AS SELECT EMPNO, ENAME, SAL, COMM, DEPTNO FROM EMP_COPY WHERE DEPTNO=30;

FORCE - 테이블 정보 없이 뷰를 생성할때

EX) CREATE OR REPLACE FORCE VIEW NOTABLE_VIEW AS SELECT EMPNO,ENAME,DEPTNO FROM EMPLOYEES WHERE DEPTNO=30;

WITH CHECK OPTION - 조건 칼럼값의 값을 변경하지 못하게 할때 

CREATE OR REPLACE VIEW VIEW_CHK30 

AS

SELECT EMPNO, ENAME, SAL, COMM, DEPTNO

FROM EMP_COPY

WHERE DEPTNO=30 WITH CHECK OPTION;

WITH READ ONLY - 기본테이블 값 변경을 막음 WITH CHECK OPTION처럼 조건 칼럼값만 막는게 아님 

 EX) CREATE OR REPLACE VIEW VIEW_READ30

AS

SELECT EMPNO, ENAME, SAL, COMM, DEPTNO

FROM EMP_COPY

WHERE DEPTNO=30 WITH READ ONLY;


----- 뷰를 활용하여 TOP-N 구하기 -----


ROWNUM - ROWNUM 은 테이블 구조를 생성하면서 제공되는 컬럼, 각행에 대한 일련번호

EX) CREATE OR REPLACE VIEW VIEW_HIRE

AS 

SELECT EMPNO, ENAME, HIREDATE

FROM EMP

ORDER BY HIREDATE;


EX) SELECT ROWNUM,EMPNO,ENAME, HIREDATE FROM VIEW_HIRE WHERE ROWNUM<=5;

 하지만 일반적으로 뷰를 따로 생성하여 TOP-N 을 구하기보다는 인라인 뷰의(안쪽쿼리) 개념으로 사용

EX) SELECT ROWNUM, EMPNO, ENAME, HIREDATE FROM (SELECT EMPNO, ENAME, HIREDATE FROM EMP ORDER BY HIREDATE) WHERE ROWNUM <=5; 




'Oracle' 카테고리의 다른 글

인덱스 INDEX  (0) 2014.11.13
시퀸스 SEQUENCE  (0) 2014.11.13
오라클 데이터 읽기의 일관성과 락.  (0) 2014.11.12
오라클 트랜잭션 관리 ㅋ.ㅋ  (0) 2014.11.12
오라클 테이블을 합병하는 MERGE ㅋ.ㅋ  (0) 2014.11.12
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

데이터 읽기의 일관성 락.

한쪽에서 사용한 데이터를 커밋이나 롤백하기전까지 대기상태로 기다리게된다. 

데드락 

만약 한쪽이 업데이트를 하고 다른한쪽도 업데이트를 하고 또 업데이트를 하면 무한대기상태가 되는데 이때는 오라클이

자동으로 종료되고 마지막에 COMMIT 되었던 지점으로 ROLLBACK 된다. 

ALTER TABLE - SET UNUSED

EX) ALTER TABLE EMP01 SET UNUSED(JOB) //JOB가 안나옴.. 

DDL 명령에  롤백

DDL- 자동으로 커밋이 일어나므로 이전 상태로 되돌리기 위해선 롤백할수 없습니다. DDL명령으로 롤백하는 방법

DROP TABLE EMP01;

CREATE TABLE EMPO01 AS SELECT * FROM EMP;


DROP TABLE EMP02;

CREATE TABLE EMP02 AS SELECT * FROM  EMP01;


ALTER TABLE EMP01 DROP COLUMN JOB;

SELECT * FROM EMP01;


SELECT * FROM EMP02;


DROP TABLE EMP0-1;

RENAME EMP02 TO EMP01;

SELECT * FROM EMP01;

TRUNCATE 와 DELETE 의 차이

TRUNCATE 쓰지말자 자동으로 커밋됨..

DELETE 사용하던 대로~

'Oracle' 카테고리의 다른 글

시퀸스 SEQUENCE  (0) 2014.11.13
가상 테이블 뷰  (0) 2014.11.13
오라클 트랜잭션 관리 ㅋ.ㅋ  (0) 2014.11.12
오라클 테이블을 합병하는 MERGE ㅋ.ㅋ  (0) 2014.11.12
오라클 DELETE문  (2) 2014.11.12
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,
COMMIT 

ROLLBACK

SAVEPOINT LABEL_NAME ;

EX) SAVEPOINT C1;

EX) ROLLBACK C1;




'Oracle' 카테고리의 다른 글

가상 테이블 뷰  (0) 2014.11.13
오라클 데이터 읽기의 일관성과 락.  (0) 2014.11.12
오라클 테이블을 합병하는 MERGE ㅋ.ㅋ  (0) 2014.11.12
오라클 DELETE문  (2) 2014.11.12
오라클 UPDATE 문  (0) 2014.11.12
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,