728x90
SMALL
INSERT ALL
WHEN HIREDATE > '2010/01/01' -- 고용일이 '2010/01/01' 이후인 사원
THEN INTO emp_hire VALUES(empno, ename, hiredate)
WHEN sal>=2000 -- 급여가 2000 이상인 사원
THEN INTO emp_sal VALUES(empno, ename, sal)
SELECT empno, ename, hiredate, sal FROM emp;
- UPDATE
UPDATE emp
SEt sal = 1200
WHERE empno = 7369;
update할때는 where절 꼭 안해주면 다 업데이트됨
UPDATE emp
SET sal = sal * 1.1
WHERE deptno IN (SELECT deptno FROM dept WHERE dname IN ('SALES', "ACCOUNTRING'));
--WHERE deptno IN (10,30);값을 알때
- DELETE는 위험하니까 조건부터쓰고 DELETE쓰기
DELETE FROM emp
WHERE sal <3000;
- MERGE
MERGE INTO emp_merge_ex m
USING(
SELECT empno, ename, deptno, sal FROM emp WHERE deptno IN (20, 30)) e
ON (m.empno = e.empno)
WHEN MATCHED THEN
UPDATE SET m.sal = round(m.sal * 1.1)
WHEN NOT MATCHED THEN
INSERT (m.empno, m.ename, m.sal, m.deptno)
VALUES (e.empno, e.ename, e.sal, e.deptno)
WHERE e.sal > 1000;
CREATE TABLE bank_account (
id NUMBER PRIMARY KEY,
name VARCHAR2(32) NOT NULL,
money NUMBER DEFAULT 0
);
SELECT * FROM bank_account;
INSERT INTO bank_account(id, name, money) VALUES(1, 'A', 1000);
INSERT INTO bank_account(id, name, money) VALUES(2, 'B', 0);
COMMIT;
--A의 계좌를 0으로 업데이트
--B의 계좌를 100으로 업데이트
UPDATE bank_account SET money = 0 WHERE name = 'A';
SELECT * FROM bank_account;
롤백하면 다시 그 전 트랜잭션으로
UPDATE bank_account SET money = 1000 WHERE name = 'B';
완
728x90
LIST
'DB > Oracle' 카테고리의 다른 글
20201029_24 (0) | 2020.10.29 |
---|---|
20201029_24 순위, 누적, 집계, 조인 (0) | 2020.10.29 |
20201028_23 다양한 함수 (0) | 2020.10.28 |
20201027_ 23 문제 및 해결2 (0) | 2020.10.27 |
20201026_22 문제 및 해결1 (0) | 2020.10.26 |
댓글