1. STS 사용시

 

1) STS 설치

http://www.springsource.org/








해당 OS에 맞는 것을 다운받아 설치한다.



--> 다운로드
--> 설치
--> 설치시 jdk, tomcat경로 지정해야 함.



2) 관련 라이브러리 다운로드

사이트 아래쪽을 보면 Downloads가 있다.



이중에서 3.1.1.RELEASE를 받을 것이다. (해당하는 것을 찾아 받으면 된다. 나는 3.1.1...)

spring-framework 3.1.1버전으로 너무 최신이면 찜찜해서..




- spring-framework-3.0.2.RELEASE-dependencies.zip도 다운로드.




spring-framework-3.1.1.RELEASE는 압축을 풀면 \spring-framework-3.1.1.RELEASE\dist 경로에 jar파일이 존재한다. 관련 jar파일을 복사해 WEB-INF/lib에 넣어 사용한다.



spring-framework-3.0.2.RELEASE-dependencies는 압축을 풀면 \org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1에서 com.springsource.org.apache.commons.logging-1.1.1.jar 복사해서 WEB-INF/lib에 넣어 사용한다.



 

2. Eclipse 에서 maven 사용

 

1) 이클립스에서 프로젝트 생성

 

 

 

2) 프로젝트에서 우측

 

 

 

pom.xml파일 생성 후 스프링 관련 추가 후 run as 에서 build,install사용하면 됨.

 

 

 

 

 

 

 

 


[ 커서(Cursor) ]


- 실행한 SQL문의 단위


1) 커서의 단계

- 커서선언하기
- 커서오픈하기
- 커서에서 추출한 결과 저장하기
- 커서닫기



 

예)

DECLARE
    VEMPNO NUMBER(4);
    VENAME VARCHAR2(20);
    VSAL NUMBER(7,2);
    
    CURSOR C1
    IS
    SELECT EMPNO,ENAME,SAL
    FROM EMP
    WHERE DEPTNO=30;
BEGIN
    OPEN C1; --커서오픈하기
    LOOP
        FETCH C1 
        INTO VEMPNO,VENAME,VSAL;
        EXIT WHEN C1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(VEMPNO||' '||VENAME||' '||VSAL);
    END LOOP;
    CLOSE C1; --커서닫기
END;
/


DECLARE
    CURSOR EMP_CURSOR
    IS
    SELECT ENAME,SAL
    FROM EMP
    ORDER BY SAL DESC;
    STAR VARCHAR2(100);
    CNT NUMBER:=0;
BEGIN
    DBMS_OUTPUT.PUT_LINE(' =======  사원별 급여 현황  =======');
    FOR CURVAL IN EMP_CURSOR LOOP
        STAR:=NULL;
        CNT:=TRUNC(CURVAL.SAL/100);
        FOR I IN 1..CNT LOOP
            STAR:=STAR||'*';
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(CURVAL.ENAME);
        DBMS_OUTPUT.PUT_LINE(STAR||' '||CURVAL.SAL);
    END LOOP;
END;
/




[ 사용자 계정관리 ]


1) 계정생성

CREATE USER 아이디 IDENTIFIED BY 비밀번호;

 

예)

CREATE USER TEST IDENTIFIED BY TEST1234;



-- 사용자 생성권한이 있는 시스템계정으로 로그인

SQL> conn / as sysdba
Connected.
 
SQL> create user test identified by test1234;
User created.


-- test계정에 접속과 리소스사용권한부여하기

SQL> grant connect,resource to test;
Grant succeeded.
SQL> conn test/test1234


2) 비밀번호 변경하기

ALTER USER 아이디 IDENTIFIED BY 수정할 비밀번호;


SQL> conn / as sysdba
Connected.
 

SQL> alter user test identified by test0000;

User altered



 

3) 계정삭제하기

DROP USER 아이디;

 

예)

drop user test;
 
-- 데이터가 하나라도 존재하면 계정삭제가 안됨.이때 CASCADE옵션 사용
SQL> drop user test CASCADE;



[ 계층형 쿼리 ]


- 계층적구조로 값을 출력


형식)

SELECT 컬럼명,..
  FROM 테이블명
START WITH 시작조건     -- 루트설정
CONNECT BY PRIOR 참조조건; -- 참조관계설정

 

( 자식쪽에 prior )

 

예1)

SELECT *
FROM EMP
START WITH ENAME='KING'     -- 시작조건(루트설정)
CONNECT BY PRIOR EMPNO=MGR; -- 참조관계설정 조건
 
 
예2)
SELECT LPAD(' ',(LEVEL-1)*2)||EMPNO,ENAME,MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO=MGR;




[ 트리거(Trigger) ]

 

- 데이터베이스가 미리 정해은은 조건을 만족하거나 어떤 동작이 수행되면 자동적으로 수행되는 동작(특정 동작에 대한 이벤트로 인해서 실행되는 프로시져)

 

- 형식)

CREATE OR REPLACE TIGGER 트리거이름
TIMING [BEFORE|AFTER] EVENT[INSERT|UPDATE|DELETE] ON 테이블명
[FOR EACH ROW]
DECLARE
    변수선언;
    ..
BEGIN
    실행문장;
    ..
END;
/


예)  DEPT테이블에 부서가 추가(INSERT)될때 부서가 추가되었음을 출력하는 트리거

SQL> SET SERVEROUTPUT ON

-- 트리거만들기
CREATE OR REPLACE TRIGGER PRINT_MSG
AFTER INSERT ON DEPT    -- DEPT테이블에 INSERT가 수행된 후 자동호출
BEGIN
    DBMS_OUTPUT.PUT_LINE('부서가 추가되었어요');
END;
/

 

-- DEPT테이블에 데이터 추가해보기

SQL> INSERT INTO DEPT VALUES(91,'개발부','종로');

부서가 추가되었어요   ==> 트리거가 자동 호출됨

 

-- 트리거 제거하기

SQL> DROP TRIGGER PRINT_MSG;

 


예)  예제테이블

#상품테이블
CREATE TABLE ITEM
(
CODE CHAR(6) PRIMARY KEY, -- 상품코드
NAME VARCHAR2(12) NOT NULL, --상품이름
COMPANY VARCHAR2(12) , --제조회사
PRICE NUMBER(8), --가격
CNT NUMBER DEFAULT 0 --재고수량
);

#입고테이블
CREATE TABLE WAREHOUSE
(
NUM NUMBER(6) PRIMARY KEY, --입고번호
CODE CHAR(6) REFERENCES ITEM(CODE), --상품코드
PUTDATE DATE DEFAULT SYSDATE,--입고날짜
PUTCNT NUMBER(6), --입고수량
PUTPRICE NUMBER(6),--입고단가
TOTALPRICE NUMBER(8) --입고총액
);
 

SQL> INSERT INTO ITEM(CODE,NAME,COMPANY,PRICE)
     2  VALUES('A01','냉장고','삼성',700000);
SQL> INSERT INTO ITEM(CODE,NAME,COMPANY,PRICE)
      2  VALUES('A02','세탁기','LG',500000);

 

SQL> SELECT * FROM ITEM;

 

CODE   NAME   ...  PRICE  CNT
----- -------      ------ ---
A01   냉장고  ...  700000  0
A02   세탁기  ...  500000  0


 


1) INSERT 트리거

 

입고테이블에 상품이 입고(INSERT)되면 자동으로 ITEM테이블의 해당상품의 재고수량이 증가(UPDATE)되는 트리거 작성

 

CREATE OR REPLACE TRIGGER TRG_ADDITEM
AFTER INSERT ON WAREHOUSE
FOR EACH ROW
BEGIN
    UPDATE ITEM SET CNT=CNT+:NEW.PUTCNT
    WHERE CODE=:NEW.CODE;
END;
/

 

 

SQL> INSERT INTO WAREHOUSE
     2  VALUES(1,'A01',SYSDATE,10,1000,10000);

1 row created.


SQL> SELECT * FROM WAREHOUSE;


NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000

==> 입고테이블에 A01제품이 추가되었으므로 트리거가 실행되어 상품테이블의 CNT수량이 입고수량만큼 증가됨

 

SQL> SELECT * FROM ITEM;


CODE NAME   COMPANY PRICE  CNT
---- ------ ------- ------ ---
A01  냉장고 삼성    700000  10
A02  세탁기 LG      500000   0

 

 

2) 삭제트리거

(입고테이블에 입고되었던 상황이 삭제되면 상품테이블에 재고수량에서 삭제된 입고수량만큼 삭제하는 트리거)

 

CREATE OR REPLACE TRIGGER TRG_DELETE
AFTER DELETE ON WAREHOUSE
FOR EACH ROW
BEGIN
 UPDATE ITEM
 SET CNT=CNT-:OLD.PUTCNT
 WHERE CODE=:OLD.CODE;
END;
/

 

SQL> SELECT * FROM WAREHOUSE;

 

NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000
2   A01  12/11/23 5      1000     10000


SQL> DELETE FROM WAREHOUSE WHERE CODE='A01';

 

2 rows deleted.

--> 삭제트리거가 실행되면서 ITEM테이블의 해당 상품의 재고수량이 감소됨

 

 

SQL> SELECT * FROM ITEM;

 

CODE NAME    COMPANY  PRICE CNT
---- ------- ------- ------ ---
A01  냉장고  삼성    700000 0
A02  세탁기  LG      500000 0

 

 

3) 갱신트리거

- 이미 입고된 상품에 대해서 입고 수량이 변경되면 상품 테이블의 재고 수량이 변경되는 트리거

 

CREATE OR REPLACE TRIGGER TRG_UPDATE
AFTER UPDATE ON WAREHOUSE
FOR EACH ROW
BEGIN
    UPDATE ITEM SET CNT=CNT+(-:OLD.PUTCNT+:NEW.PUTCNT)
    WHERE CODE=:NEW.CODE;
END;
/


SQL> SELECT * FROM WAREHOUSE;

NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000
2   A01  12/11/23 5      1000     10000


SQL> SELECT * FROM ITEM;

CODE NAME    COMPANY PRICE   CNT
---- ------- ------- ------- ----
A01  냉장고  삼성    700000  15
A02  세탁기  LG      500000   0

 

-- 입고테이블의 수량변경(UPDATE하기)
UPDATE WAREHOUSE
SET PUTCNT=3
WHERE NUM=1;


- 입고테이블의 수량이 변경됨
SQL> SELECT * FROM WAREHOUSE;


NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 3      1000     10000
2   A01  12/11/23 5      1000     10000


-- 상품테이블의 재고수량(CNT)도 자동 수량이 변경됨

SQL> SELECT * FROM ITEM;


CODE NAME    COMPANY PRICE   CNT
---- ------- ------- ------- ----
A01  냉장고  삼성    700000  8
A02  세탁기  LG      500000  0

 



 

Q1) DEPT테이블의 부서가 삭제될때 해당부서에 근무하는 사원들도 자동 삭제되는 트리거를 만들어 보세요..(COMMIT하지말고 ROLLBACK하세요)


CREATE OR REPLACE TRIGGER EMPDEL
AFTER DELETE ON DEPT
FOR EACH ROW
BEGIN
     DELETE FROM EMP
     WHERE DEPTNO=:OLD.DEPTNO;
END;
/

 

-- DEPT테이블에서 부서 제거
SQL> DELETE FROM DEPT WHERE DEPTNO=10;

 

-- 해당부서에 근무하는 사원들도 같이 삭제됨
SQL> SELECT * FROM EMP;




[ PL/SQL ]

 

- 구조적인 SQL언어와 달리 SQL을 절차적인 방식에 의해 사용하도록 설계한 언어

 

1) PL/SQL의 구조

DECLARE  -- 선언(변수선언,커서,사용자정의 예외,..)
BEGIN  -- 실행(SELECT,DML,..)
EXCEPTION -- 예외처리
END;
/

 


예1)

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2     I_MSG VARCHAR2(100); -- 변수선언
3  BEGIN
4     I_MSG:='HELLO';  -- 값대입
5     DBMS_OUTPUT.PUT_LINE('I_MSG:' || I_MSG); -- 화면출력
6  END;
7  /

 

[결과]
I_MSG:HELLO

 

SQL> DECLARE
2     VEMPNO NUMBER(4);
3     VENAME VARCHAR2(20);
4     VDEPTNO NUMBER(4);
5     VSAL NUMBER(4);
6     BONUS NUMBER(10);
7  BEGIN
8     SELECT EMPNO,ENAME,DEPTNO,SAL INTO VEMPNO,VENAME,VDEPTNO,VSAL
9     FROM EMP
10     WHERE EMPNO=7369;
11     IF(VDEPTNO=10) THEN
12             BONUS:=VSAL*0.1;
13     ELSIF(VDEPTNO=20) THEN
14             BONUS:=VSAL*0.2;
15     ELSIF(VDEPTNO=30) THEN
16             BONUS:=VSAL*0.3;
17     END IF;
18     DBMS_OUTPUT.PUT_LINE('사원번호 급여 부서번호 보너스');
19     DBMS_OUTPUT.PUT_LINE(VEMPNO ||' '||VSAL||' '||VDEPTNO||' '||BONUS);
20  END;
21  /

 

사원번호 급여 부서번호 보너스
7369 800 20 160

 

 

 

[ 저장 프로시져(Stored Procedure) ]


- 특정한 처리를 수행하는 PL/SQL 서브프로그램. 파라미터를 받아서 특정 작업을 수행한다.


- 형식)

CREATE OR REPLACE PROCEDURE 프로시져명(파라미터,..)
IS
변수선언;
..
BEGIN
실행문;
..
END;
/

 



예)-- 연습용 테이블

CREATE TABLE MEM
(
NUM NUMBER PRIMARY KEY,
NAME VARCHAR2(20),
PHONE VARCHAR2(15),
ADDR VARCHAR2(20)
);

 

예1) 프로시져만들기

CREATE OR REPLACE PROCEDURE ADDMEM
(
NUM NUMBER, -- 파라미터
NAME VARCHAR2,
PHONE VARCHAR2,
ADDR VARCHAR2
)
IS
BEGIN
INSERT INTO MEM
VALUES(NUM,NAME,PHONE,ADDR);
END;
/

 

-- 프로시져 오류보기

SQL>SHOW ERROR

 

-- 프로시져 수행

SQL> EXECUTE ADDMEM(1,'홍','010','대구');

 



예2)

CREATE OR REPLACE PROCEDURE ADDMEM
(
    NUM MEM.NUM%TYPE,
    NAME MEM.NAME%TYPE,
    PHONE MEM.PHONE%TYPE:='010',-- 파라미터값이없으면 디폴트값으로 채워짐
    ADDR MEM.ADDR%TYPE:='서울'
)
IS
BEGIN
INSERT INTO MEM
VALUES(NUM,NAME,PHONE,ADDR);
COMMIT;
END;
/

 

SQL> EXECUTE ADDMEM(2,'김아무');

 

-- 예제테이블

CREATE TABLE HAKSA
(
    HAKBUN NUMBER(10) PRIMARY KEY,
    KOR NUMBER(3),
    ENG NUMBER(3),
    TOT NUMBER(3),
    HAKJUM CHAR(2)
);

 

SQL> INSERT INTO HAKSA(HAKBUN,KOR,ENG) VALUES(1,100,90);

SQL> INSERT INTO HAKSA(HAKBUN,KOR,ENG) VALUES(2,80,70);

 

 -- 학번을 파라미터로 받아서 총점과 학점을 계산해주는 저장 프로시져

CREATE OR REPLACE PROCEDURE HAKSA_PRO(NUM HAKSA.HAKBUN%TYPE)
IS
    HAK HAKSA.HAKJUM%TYPE;
    SUM1 HAKSA.TOT%TYPE;
    AVG1 NUMBER;
BEGIN
    SELECT (KOR+ENG) INTO SUM1
      FROM HAKSA
     WHERE HAKBUN=NUM;

    AVG1:=SUM1/2; --평균구하기

    -- IF절 이용해서 학점구하기
    IF(AVG1>=90) THEN
        HAK:='A';
    ELSIF(AVG1>=80) THEN
        HAK:='B';
    ELSIF(AVG1>=70) THEN
        HAK:='C';
    ELSE
        HAK:='F';
    END IF;

    UPDATE HAKSA
       SET TOT=SUM1
         , HAKJUM=HAK -- 계산된 데이터로 수정하기
     WHERE HAKBUN=NUM;
   
    COMMIT;
END;
/

 

-- 프로시져 실행하기

SQL> EXECUTE HAKSA_PRO(1);

 

 



[ 사용자 정의 함수(Stored Function) ]


- 사용자가 만든 함수이며 어떤 연산을 수행한뒤 결과값을 반환한다.


형식)

CREATE OR REPLACE FUNCTION 함수명(파라미터,..)
RETURN 리턴형
IS
변수선언;
..
BEGIN
실행문장;
..
RETURN 값;
END;
/

 



예) 입력받은 값으로부터 10%의 세율을 구하는 함수

CREATE OR REPLACE FUNCTION TAX(P_VALUE NUMBER)
RETURN NUMBER
IS
VAL NUMBER;
BEGIN
    VAL:=P_VALUE*0.1; -- 세율구하기
    RETURN VAL; --세율반환하기
END;
/

 

SQL> SELECT TAX(3000) FROM DUAL;

TAX(3000)
----------
300

 

 


## IF문 형식

IF 조건절 THEN
    실행문;
ELSE
    실행문;
END IF;

 



Q1) 사원의 급여를 파라미터로 받아서 5000이상이며 15%에 해당하는 금액을 리턴하고 5000미만이면 10%를 리턴하는 함수 작성

CREATE FUNCTION MYTAX(P_VAL NUMBER) RETURN NUMBER
IS
    V_RESULT NUMBER;
BEGIN
    IF(P_VAL>=5000) THEN
        V_RESULT:=P_VAL*0.15;
    ELSE
       V_RESULT:=P_VAL*0.1;
    END IF;

    RETURN V_RESULT;

END;
/

-- FUNCTION호출
SQL> SELECT MYTAX(6000) FROM DUAL;

MYTAX(6000)
-----------
900

 

 

Q2) 파라미터로 사원번호를 받아서 근무하는 부서명을 반환하는 함수작성

CREATE OR REPLACE FUNCTION EMPDNAME(NUM EMP.EMPNO%TYPE)
RETURN VARCHAR2  -- 반환타입
IS
    V_RESULT VARCHAR2(20); --부서명저장할 변수
BEGIN
    SELECT D.DNAME
      INTO V_RESULT
      FROM EMP E,
           DEPT D
     WHERE E.DEPTNO=D.DEPTNO
       AND E.EMPNO=NUM;
   
    RETURN V_RESULT;
END;
/

 

-- FUNCTION호출해보기

SQL> SELECT EMPDNAME(7369) FROM DUAL;




'DBMS > 오라클 PLSQL' 카테고리의 다른 글

2. 기본  (0) 2015.02.13
1. PL/SQL 개요  (0) 2015.02.11
프로시져 실행 샘플 - OUT 값이 여러행인 경우  (0) 2015.01.21


[ 시퀀스 ]


- 연속적인 숫자값을 자동으로 증감시키는 일련번호를 발생시키는 객체

 

- 형식

CREATE SEQUENCE 시퀀스명
[INCREMENT BY N]
[START WITH N]
[MAXVALUE N | NOMAXVALUE N]
[MINVALUE N | NOMINVALUE N]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]

 

예)

CREATE SEQUENCE TEST_SEQ; -- 시퀀스 생성하기

 

SQL> SELECT TEST_SEQ.NEXTVAL FROM DUAL;-- 일련번호 얻어오기


NEXTVAL
----------
1

 

SQL> SELECT TEST_SEQ.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
2

 

SQL> SELECT TEST_SEQ.CURRVAL FROM DUAL; -- 현재발생된 일련번호 얻어오기

 

SQL> DROP SEQUENCE TEST_SEQ; -- 시퀀스 삭제하기

 

예)

SQL> CREATE SEQUENCE TEST_SEQ1
    2  INCREMENT BY 10
    3  START WITH 100
    4  MAXVALUE 100
    5  CYCLE
    6  NOCACHE;
Sequence created.

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
100

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
1

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
11

 

-- 시퀀스 조회하기

SQL> SELECT * FROM SEQ;

 


예)

SQL> CREATE SEQUENCE TEST_SEQ1
    2  INCREMENT BY 10
    3  START WITH 100
    4  MAXVALUE 100
    5  CYCLE
    6  NOCACHE;


SQL> CREATE SEQUENCE BOARD_SEQ;

Sequence created.

 

SQL> INSERT INTO BOARD
    2  VALUES(BOARD_SEQ.NEXTVAL,'TEST','SONG');

1 row created.

 

SQL> INSERT INTO BOARD
    2  VALUES(BOARD_SEQ.NEXTVAL,'TODAY','KIM');

 

SQL> SELECT * FROM BOARD;

 

NUM TITLE  WRITER
--- ------ -------
1   TEST   SONG
2   TODAY  KIM

 

 



[ 뷰(VIEW) ]


1) 뷰는 테이블에 대한 가상 테이블로써 SELECT로 조회된 데이터들의 가상 테이블이다.

 

2) 사용이유

(1) 보안설정
(2) 복잡하고 자주 사용되는 질의를 뷰를 통해서 쉽게 사용

 

3) 형식

CREATE OR REPLACE VIEW 뷰이름
AS
서브쿼리;
..
[WITH CHECK OPTION]
[WITH READ ONLY]

 

 

## 뷰 생성 권한 부여하기

SQL> CONN / AS SYSDBA

SQL> GRANT CREATE VIEW TO SCOTT;

SQL> CONN scott/tiger

 

 

-- 뷰생성하기

SQL> CREATE VIEW MYVIEW
      2  AS
      3     SELECT EMPNO "사원번호",ENAME "사원이름",SAL "급여",JOB "직업"
      4     FROM EMP

 

SQL> SELECT * FROM MYVIEW;

 

사원번호 사원이름 급여 직업
-------- -------- ---- ------
7369     SMITH    800  CLERK
7521     WARD     1250 SALESMAN
7566     JONES    2975 MANAGER
7654     MARTIN   1250 SALESMAN
..

 

SQL> SELECT 사원이름,급여 FROM MYVIEW;

 

사원이름 급여
-------- -----
SMITH    800
WARD     1250
JONES    2975
MARTIN   1250
BLAKE    2850
......


SQL> INSERT INTO MYVIEW
      2  VALUES(9000,'김길동',3000,'청소부');

1 row created.


SQL> SELECT * FROM EMP; -- 실제테이블에 추가됨


-- 뷰제거하기
SQL> DROP VIEW MYVIEW;

 

 


예)

SQL> CREATE OR REPLACE VIEW MYVIEW
      2  AS
      3     SELECT EMPNO,ENAME,SAL,JOB,DEPTNO
      4     FROM EMP
      5     WHERE SAL>=2000
      6     WITH CHECK OPTION;

 

 

SQL> INSERT INTO MYVIEW
      2  VALUES(9002,'송규남',1000,'강사',30);

INSERT INTO MYVIEW
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
--> WITH CHECK OPTION 이 설정되어 있어서 오류!
(뷰의 질의에 대한 조건이 맞지 않으므로 오류!)

 

 


4) 뷰의 종류

(1) 단일뷰 : 하나의 테이블로 생성되는 뷰(기본적으로 DML작업가능. WITH READ ONLY 옵션을 주면 DML작업은 할수없다.)

(2) 복합뷰 : 두개 이상의 테이블로 생성되는 뷰(조인).DML 작업을 할 수 없다.

 



 

Q1) EMP테이블과 DEPT테이블을 이용하여 이름,직업,급여,부서명,위치를 조회하는 뷰를 생성하고 사용해 보세요.

SQL> CREATE OR REPLACE VIEW EMPVIEW
  2  AS
  3     SELECT E.ENAME,E.JOB,E.SAL,D.DNAME,D.LOC
  4     FROM EMP E,DEPT D
  5     WHERE E.DEPTNO=D.DEPTNO;

View created.

SQL> SELECT * FROM EMPVIEW;              


-- 뷰 정보 조회하기
SQL> SELECT VIEW_NAME FROM USER_VIEWS;

VIEW_NAME
----------
EMPVIEW
MYVIEW

 

 


+ Recent posts