*.LOCK(데이터 읽기 일관성과 락)
-- User1장소에서 접속
update dept
set deptno=70
where dname='부서추가1';

-- User2장소에서 접속
update dept
set deptno=70
where dname='부서추가1';

User1실행후.. User2를 실행하면..
User2에서는 lock현상이 일어남.

User1에서 commit/rollback실행시..
user2에서 실행됨 확인.

질문거리. User2.에서 해소방법 따로없는지?

*.Table 생성
create table table명
(
컬럼명 데이터 타입[(크기)],
...

)

create table dept2
(
deptno number(2),
dname varchar2(14),
loc varchar2(13)
)

*.table 내용 및 구조 복사.
-- dept의 모든 내용과 테이블 구조 복사
create table dept3 as
elect * from dept

drop table dept3;
create table dept3 as
--select * from dept d join emp e using(deptno);
--select * from dept d natural join emp e;
--자동을 사용하면 됨.
--select * from dept d, emp e where d.deptno=e.deptno;
--select * from dept d join emp e on d.deptno=e.deptno;
--안되는 이유 열명중복.

-- dept4만들기.. 원본 dept 부서번호 30이하의 내용만 복사
create table dept4 as
select * from dept where deptno<=30

-- dept5만들기.. 원본 dept 부서번호, 부서명만 복사, 10~50사이만.
create table dept5 as
select deptno, dname from dept where deptno between 10 and 50

-- dept6만들기.. 원본 dept 10,20의 dno, dname
create table dept6 as
select deptno as dno, dname from dept where deptno in (10,20)

-- dept66복사
create table dept66 as
select * from  dept6

-- dept6 데이터 삭제.
delete from dept6;

-- rollback으로 복구
rollback;

-- 데이터 삭제 : truncate table 테이블명;
truncate table dept66;

-- rollback으로 복구
rollback;

select * from dept66;
--선택된 레코드가 없습니다.

-->rollback : 복구 가능한 delete(DML문장) / 안되는 truncate(DML문장아님)

*.table 삭제
drop table table명.
drop table dept5;

-- dept5만들기, dept table 구조만 복사(조건 거짓으로만들어서)
create table dept5
as select * from dept where 10=200;

--dept원본빼고 삭제.
--일일이 삭제함.

*.다중테이블에 다중로우입력.
-- 다중 insert 문법
insert [all | first]
 [when 조건 then]
 into 테이블명 values (컬럼명)
 [when 조건 then]
 into 테이블명 values (컬럼명)
 SubQuery
:all(전체)
:frist(만약 같은 결과값이라면 처음쓰이는곳에서만 표시.다른결과값은 표시)
ex)1조건 MILLER, 2조건 MILLER,FORD라면. 2조건테이블에는 FORD만 들어감.
즉 1조건만족하면 2조건에는 포함되지 않음.

--emp 내용물없는 구조만 복사
--사원번호,사원명,입사일,부서번호있는 empdept테이블 생성

--emp 내용물없는 구조만 복사
--사원번호,사원명,입사일 empdate테이블 생성

create table empdept
as
select empno, ename, hiredate, deptno from emp where 10=20;

create table empdate
as
select empno, ename, hiredate from emp where 10=20;

--emp의 사원번호 7900초과하는
--사원번호,사원명,입사일,부서번호있는 empdept입력.

--emp의 사원번호가 7900초과하는
--사원번호,사원명,입사일 empdate테이블 생성

--다중 1번사용.
insert all
into empdept values (empno, ename, hiredate, deptno)
into empdate values (empno, ename, hiredate)
select ename, empno, hiredate, deptno --순서는 상관없이 컬럼명만상관.
from emp e
where empno>7900;

--연습테이블 데이터 삭제.
delete from empdept;
delete from empdate;

-- 승기사원 입사일 오늘로 수정.
update emp
set hiredate=sysdate
where ename='이승기'

--부서번호 20이하이면 empdept테이블에
--입사일이 82년도이전 이면 empdate테이블에 넣기.
insert all
when deptno<=20 then
into empdept values (empno, ename, hiredate, deptno)
when hiredate <= to_date('1982-12-31','yyyy-mm-dd') then
into empdate values (empno, ename, hiredate)
select ename, empno, hiredate, deptno --순서는 상관없이 컬럼명만상관.
from emp e
where empno>7900;

--부서번호 10이면 empdept테이블에
--입사일이 82년도이전이고 부서번호10인경우는 제외한 empdate테이블에 넣기.
insert first
when deptno=10 then
into empdept values (empno, ename, hiredate, deptno)
when hiredate <= to_date('1982-12-31','yyyy-mm-dd') then
into empdate values (empno, ename, hiredate)
select ename, empno, hiredate, deptno --순서는 상관없이 컬럼명만상관.
from emp e
where empno>7900;

Posted by 말없제이
,