-- delete 문 : 행을 삭제 // **** WHERE 절을 명시하지 않으면 모든 행이 삭제됨 ****


DELETE FROM emp WHERE empno='8000';


-- 다른 테이블의 정보를 기반으로 행 삭제


DELETE FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE empno='7839'); -- //셀렉트문으로 먼저 조회후 삭제하는 습관을 들여야함. 선조회 후삭제.


-- merge문  : 데이터베이스 테이블에서 조건에 따라 데이터를 갱신하거나 삽입하는 기능을 제공. 행당 행이 존재하는 경우 UPDATE를 수행하고

--               새로운 행일경우 INSERT를 수행


-- 행 병합 : copy_emp 테이블에서 행을 삽입 또는 갱신하여 emp 테이블과 일치시킴.


CREATE TABLE copy_emp ( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), 

HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2), CONSTRAINT copy_pk_empno PRIMARY KEY (EMPNO),

CONSTRAINT copy_dept_fk1 FOREIGN KEY (deptno) REFERENCES dept(deptno)); --카피 생성


MERGE INTO copy_emp c USING emp e ON(c.empno = e.empno) WHEN MATCHED THEN UPDATE SET c.ename = e.ename ,

c.job =e.job , c.mgr = e.mgr , c.hiredate = e.hiredate , c.sal = e.sal , c.comm = e.comm , c.deptno = e.deptno WHEN NOT MATCHED THEN

INSERT VALUES (e.empno,e.ename,e.job,e.mgr,e.hiredate, e.sal, e.comm, e.deptno); --백업


-- 두개의 테이블을 병합하는 경우가 아니고 데이터를 삽입하려할 때 기존에 존재하는 데이터가 있으면 업데이트하도록 응용할 수 있음.


MERGE INTO emp c USING (SELECT 8000 empno , 'DENNIS2' ename , 'SALESMAN' job, '7698' mgr, '99/06/01' hiredate,

4000 sal, 200 comm, 30 deptno FROM dual )e /*컬럼에 저장될 데이터를 컬럼과 매칭하여 dual를 이용해 명시함*/

ON(c.empno = e.empno) WHEN MATCHED THEN UPDATE SET c.ename = e.ename ,

c.job =e.job , c.mgr = e.mgr , c.hiredate = e.hiredate , c.sal = e.sal , c.comm = e.comm , c.deptno = e.deptno WHEN NOT MATCHED THEN

INSERT VALUES (e.empno,e.ename,e.job,e.mgr,e.hiredate, e.sal, e.comm, e.deptno); --백업-


-- VIEW 질의문이 길고 복잡해질 때 간결하게 질의문을 작성해서 사용할 수 있도록 VIEW 생성할 수 있음

-- 보안적인 측면에서 특정 컬럼을 제외해서 표시하고 싶을 때 VIEW 사용 

          -- 복잡한 질의를 쉽게 작성하기 위해

          -- 데이터 독립성을 제공하기 위해

          -- 동일한 데이터로부터 다양한 결과를 얻기 위해


-- VIEW 작성


CREATE OR REPLACE VIEW emp10_view as SELECT empno id_number, ename name, sal*12 ann_salary FROM emp WHERE deptno=10;


-- VIEW 구조확인


DESC emp10_view;


-- VIEW의 데이터 호출


SELECT *FROM emp10_view;


CREATE OR REPLACE VIEW emp_info_view AS SELECT e.empno,e.ename,d.deptno,d.loc,d.dname FROM emp e ,dept d WHERE e.deptno=d.deptno;


DROP VIEW emp10_view; -- 뷰삭제


-- sequence : 유일한 값을 생성해주는 오라클객체 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있음

-- 보통 primary key 값을 생성하기 위해 사용


-- 시작 값이 1이고 1씩 증가하고, 최대값이 100000이 되는 시퀀스 생성


CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1 MAXVALUE 100000;


--currval : 현재값을 반환

--nextval : 현재 시퀀스 값의 다음 값 반환


SELECT test_seq.nextval FROM dual;

SELECT test_seq.currval FROM dual;


-- 시퀀스의 수정

-- [주의 start with는 수정할 수 없음] 

--alter sequence sequence_name increment by n maxvalue n | nomaxvalueminvalue n | nominvaluecycle | nocycle ;


-- 시퀀스 삭제

--DROP SEQUENCE SEQUENCE_NAME;


--인덱스(INDEX) : 인덱스는 원하는 정보의 위치를 빠르고, 정확하고, 지능적으로 알아낼 수 있는 방법을 제공한다. 

--테이블의 컬럼에 대한 제약 조건을 설정할 때 Primary Key나 Unique로 설정하면 Oracle은 자동으로 이 컬럼에 대해 Unique Index를 설정한다. 

--데이터 값이 중복됨이 없이 유일한 값을 가지는 컬럼에 인덱스를 설정했을 때 이를 Unique Index라 한다.


--유일한 값을 가지는 컬럼에 인덱스 설정 : Unique Index


CREATE UNIQUE INDEX dname_idx ON dept (dname);


-- 유일한 값을 가지지 않는 컬럼에 인덱스 설정 : Non Unique Index


create index emp_ename_idx on emp(ename);


-- 동의어 : 동의어(객체의 다른 이름)를 생성하여 객체 액세스를 단순화한다.

-- - 다른 사용자가 소유한 테이블을 쉽게 참조

-- - 긴 객체 이름을 짧게 만든다.


--생성 

CREATE SYNONYM emp10 FOR emp10_view;


SELECT *FROM emp10;


--권한


--관리자 계정과 사용자 계정


--관리자 계정의 역할 :데이터베이스의 생성과 관리를 담당하는 슈퍼유저(Super User)계정이며

--데이터베이스 객체의 생성, 변경, 삭제 등의 작업이 가능하다. 

--sys계정 : 데이터베이스에서 발생하는 모든 문제를 처리할 수 있는 권한

--SYSTEM계정 : 오라클 데이터베이스를 유지,보수할 때 사용하는 계정, SYS와 달리 데이터베이스를 생성할 권을 가지지 않는다.


--사용자 계정의 역할 : 사용자 계정은 데이터베이스에 접근하여 데이터를 조작(삽입, 삭제, 수정, 검색)하고 관리하는 일을 수행할 수 있는 계정이다. 

-- 일반 계정은 업무에 필요한 최소한의 권한만 가지는 것을 원칙으로함.







권한을 받을 수 있도록

RUN SQL Command Lin 작성







--PL/SQL


--PL/SQL이란 ? 

--PL/SQL은 ‘Procedural language extension to Structured Query Language(SQL)’의 약자

--SQL을 확장한 순차적 처리 언어

--데이터베이스 질의어인 SQL과 일반 프로그래밍 언어의 특성을 결합한 언어. 즉 PL/SQL을 사용하면 조건문이나 반복문,

--변수나 상수를 선언해서 사용할 수 있을 뿐만 아니라 SQL도 사용할 수 있음


--PL/SQL의 기본 구조

--PL/SQL의 기본 단위는 블록(block)

--1) 선언부(declarative part) : 사용할 변수나 상수를 선언(선언부에만 변수와 상수 선언 가능)

--2) 실행부(executable part) : 실제 처리할 로직을 담당하는 부분 

--3) 예외처리부(exception-building part) : 실행부에서 로직을 처리하던 중 발생할 수 있는 각종 오류들에 대해 처리


--기본 구조


begin

     dbms_output.put_line('Hello World');

end;


--익명 블록

declare

  --변수를 선언할 수 있는 선언부

  message VARCHAR2(100);

begin

  --실행부에 사용할 변수는 선언부에서 미리 선언되어야함

  message:='Hello World!!!!'; 

  dbms_output.put_line(message);

end;


declare 

 --변수 선언 및 초기화

 message VARCHAR2(100) := 'HELLO WORLD';

begin

 dbms_output.put_line(message);

end;


declare 

     counter integer;

begin

     --변수 선언후 초기화 하지 않으면 널로 인식 


     counter:=counter+1;

     if counter is null then

     dbms_output.put_line('Result : counter is null');

end if;


end;


declare 

     counter integer;

     i integer;

begin

      for i in 1..9 loop

  counter := (2*i);

  dbms_output.put_line(' 2 * ' || i || ' = ' || counter);

  end loop;

end;


--예외처리부

--Exception when 예외1 then 예외처리1

--      when 예외2 then 예외처리2

--     

--      when others then 예외처리


declare

  counter integer;

begin

  counter := 10;

  counter := counter /0;

  dbms_output.put_line(counter);

exception when others then

  dbms_output.put_line('error occured');

end;


-- 콜렉션

-- varray

-- variable array의 약자로 고정 길이를 가진 배열


declare 

type varray_test is varray(3) of integer;

varray1 varray_test;

begin

-- 선언한 varray에 데이터를 할당

varray1:=varray_test(10,20,30);

-- varray에 저장된 데이터를 호출해서 출력

dbms_output.put_line(varray1(1));

end;




'프로그래밍 > sql,php' 카테고리의 다른 글

DATE_FORMAT , INTERVAL , TIMESTAMP  (0) 2019.05.23
sql> PL/SQL 2일차  (0) 2018.11.22
sql> 오라클db 수업 4일차  (0) 2018.11.19
sql> 오라클db 수업 3일차  (0) 2018.11.16
sql> 오라클 sql 수업 2일차  (0) 2018.11.15

+ Recent posts