728x90
수업내용
1교시 (09:30-10:20)
- 지난 시간 복습
2교시 (10:30-11:20)
- ISUD
SELECT * FROM TAB;
SELECT COUNT(*) FROM TAB; -- 4
SELECT * FROM TEST_T1; -- 테이블이 삭제됨
SELECT * FROM TEST_T2;
-- TEST_T2 테이블에
-- TC2_1 : 본인 나이
-- TC2_2 : 본인 이름
-- TC2_3 : 현재날짜
-- 입력하고, 조회하고, ROLLBACK, 조회하기
-- 입력하고, 조회하고, COMMIT, 조회하기
-- 데이터베이스에서 덤프 뜨세요
INSERT INTO TEST_T2 (
TC2_1 -- place holder 1
,TC2_2 -- place holder 2
,TC2_3 -- SYSDATE
)
VALUES (
30 -- place holder 1
,'박건원' -- place holder 2
,SYSDATE
);
SELECT * FROM TEST_T2;
ROLLBACK;
COMMIT;
INSERT INTO TEST_T2 -- (TC2_1, TC2_2, TC2_3)
VALUES ( 27, '박주형', SYSDATE);
COMMIT;
/*
컬럼 갯수가 같아야 한다.
INSERT INTO TEST_T2 -- (TC2_1, TC2_2, TC2_3)
VALUES ( 27, '박주형');
SQL 오류: ORA-00947: 값의 수가 충분하지 않습니다
00947. 00000 - "not enough values"
*/
/*
오라클에는 에러 코드를 지원한다.
ORA-00947
ORA : 접두어
00947 : 에러 코드 이면서 에러유형의 번호
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES ( 27, '전건희');
SQL 오류: ORA-00947: 값의 수가 충분하지 않습니다
00947. 00000 - "not enough values"
*/
3교시 (11:30-12:20)
- ISUD
INSERT INTO TEST_T2 (TC2_1, TC2_2)
VALUES ( 27, '전건희');
SELECT * FROM TEST_T2;
INSERT INTO TEST_T2 (TC2_1, TC2_3)
VALUES ( 27, SYSDATE);
SELECT * FROM TEST_T2;
COMMIT;
-- 자바 SQLMAP 에서 사용하기
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES ( ?, ?, SYSDATE);
DESC TEST_T2;
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES ('2.22', 한글 , '20220315');
오류 발생 명령행: 60 열: 31
오류 보고 -
SQL 오류: ORA-00984: 열을 사용할 수 없습니다
00984. 00000 - "column not allowed here"
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, 한글 , '20220315');
오류 발생 명령행: 69 열: 29
오류 보고 -
SQL 오류: ORA-00984: 열을 사용할 수 없습니다
00984. 00000 - "column not allowed here"
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , 2022년3월15일);
명령의 78 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , 2022년3월15일)
오류 발생 명령행: 79 열: 43
오류 보고 -
SQL 오류: ORA-00917: 누락된 콤마
00917. 00000 - "missing comma"
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , '2022년3월15일');
명령의 88 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , '2022년3월15일')
오류 보고 -
ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , 2022315);
명령의 96 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , 2022315)
오류 발생 명령행: 97 열: 39
오류 보고 -
SQL 오류: ORA-00932: 일관성 없는 데이터 유형: DATE이(가) 필요하지만 NUMBER임
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , '2022315');
명령의 106 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , '2022315')
오류 보고 -
ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
*/
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글' , '20220315');
-- 1 행 이(가) 삽입되었습니다.
SELECT * FROM TEST_T2;
ROLLBACK;
DESC TEST_T2;
/*
이름 널? 유형
----- -- ------------
TC2_1 NUMBER(7,2)
TC2_2 VARCHAR2(30)
TC2_3 DATE
*/
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.2233, '한글', '20220315');
SELECT * FROM TEST_T2;
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (12345678.2233, '한글', '20220315');
명령의 149 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (12345678.2233, '한글', '20220315')
오류 보고 -
ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.
*/
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, '한글이몇자나들어가는지궁금합니다.', '20220315');
*/
SELECT LENGTH('한글이몇자나들어가는지궁금합니다.') FROM DUAL; -- 17
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcde' , '20220315');
명령의 163 행에서 시작하는 중 오류 발생 -
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (2.22, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcde' , '20220315')
오류 보고 -
ORA-12899: "SCOTT"."TEST_T2"."TC2_2" 열에 대한 값이 너무 큼(실제: 31, 최대값: 30)
*/
SELECT LENGTH('ABCDEFGHIJKLMNOPQRSTUVWXYZabcde') FROM DUAL; -- 31
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (NULL, NULL, NULL);
SELECT * FROM TEST_T2;
/*
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES ('NULL', 'NULL', 'NULL');
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (NULL, 'NULL', 'NULL');
오류 보고 -
ORA-01722: 수치가 부적합합니다
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES ('NULL', 'NULL' , 'NULL')
오류 보고 -
ORA-01722: 수치가 부적합합니다
*/
4교시 (12:30-13:20)
- ISUD
SELECT * FROM TEST_T2;
INSERT INTO TEST_T2 (TC2_1, TC2_2, TC2_3)
VALUES (30, '홍길동', SYSDATE);
COMMIT;
INSERT INTO TEST_T2
SELECT * FROM TEST_T2 WHERE ROWNUM < 2;
SELECT * FROM TEST_T2;
INSERT INTO TEST_T2 (TC2_1, TC2_2)
SELECT TC2_1, TC2_2 FROM TEST_T2 WHERE ROWNUM < 3;
SELECT * FROM TAB;
DESC TEST_T3;
SELECT * FROM ALL_IND_COLUMNS;
/*
CREATE TABLE TEST_T3 (
T_NUM VARCHAR(20) PRIMARY KEY
,T_ID VARCHAR(20) NOT NULL
,T_PW VARCHAR(20) NOT NULL
,T_NAME VARCHAR(50)
,T_TEL VARCHAR(16)
,T_HP VARCHAR(16)
,T_ADDR VARCHAR(200)
,T_EMAIL VARCHAR(100) NOT NULL
,T_INSERTDATE DATE
,T_UPDATEDATE DATE
);
*/
SELECT * FROM TAB;
SELECT * FROM TEST_T3;
/*
테이블 생성 시 컬럼에 PRIMARY KEY를 지정하면
시스템에서 해당 컬럼에 인덱스를 부여한다.
인덱스 이름은 SYS_C00110565이다.
컬럼에 PRIMARY KEY를 지정하면
해당 컬럼은 NOT NULL + UNIQUE이다.
그 테이블에 해당 컬럼에는 꼭 데이터가 있어야 하고 <-- NOT NULL
그 데이터와 같은 것이 있으면 안된다. <-- UNIQUE
*/
-- TEST_T3 T_NUM SYS_C0011056
SELECT A.TABLE_NAME, A.COLUMN_NAME, A.INDEX_NAME
FROM ALL_IND_COLUMNS A
WHERE A.TABLE_NAME IN ('TEST_T3');
5교시 (14:30-15:20)
- ISUD
CREATE TABLE TEST_T4 (
T1 VARCHAR2(20) PRIMARY KEY -- NOT NULL + UNIQUE
,T2 VARCHAR2(20) NOT NULL
,T3 NUMBER(4,3) -- NULL 허용
,T4 VARCHAR2(1) -- NULL 허용
,T5 DATE -- NULL 허용
);
DESC TEST_T4;
SELECT * FROM TEST_T4;
SELECT A.TABLE_NAME, A.COLUMN_NAME, A.INDEX_NAME
FROM ALL_IND_COLUMNS A
WHERE A.TABLE_NAME IN ('TEST_T4');
/*
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('1', '홍길동', 30, 'Y', SYSDATE);
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('1', NULL, NULL, NULL, NULL);
*/
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('1', '홍길동', NULL, NULL, NULL);
ROLLBACK;
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('1', '홍길동', 30, NULL, NULL);
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('1', '홍길동', 1.333, NULL, NULL);
SELECT * FROM TEST_T4;
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('2', '박주현', 7, 'Y', SYSDATE);
/*
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('2', '전윤희', 2, 'Y', SYSDATE);
오류 보고 -
ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0011350)에 위배됩니다
*/
/*
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES (NULL, '전윤희', 2, 'Y', SYSDATE);
오류 보고 -
ORA-01400: NULL을 ("SCOTT"."TEST_T4"."T1") 안에 삽입할 수 없습니다
*/
-- [교재 334p] INDEX
-- PRIMARY KEY = NOT NULL + UNIQUE
SELECT * FROM TEST_T4;
SELECT * FROM TEST_T4 WHERE T4 = 'Y';
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5)
VALUES ('3', '전윤희', 2, 'Y', SYSDATE);
COMMIT;
-- 테이블 컬럼 사이즈 TEST_T4
ALTER TABLE TEST_T4
MODIFY T3 NUMBER(6,3);
DESC TEST_T4;
/*
UPDATE 테이블이름
SET 컬럼명 = 값, 컬럼명 = 값
WHERE 컬럼명 = 값
*/
-- 1. 변경할 컬럼 값 조회해보기
SELECT T3 FROM TEST_T4 WHERE T2 = '홍길동' AND T1 = '1'; -- 1.333
-- 2. 값을 확인했으면 UPDATE 구문으로 변경하기
UPDATE TEST_T4
SET T3 = 30
WHERE T2 = '홍길동' AND T1 = '1';
-- 3. 값을 확인하고 ROLLBACK, COMMIT
COMMIT;
-- 박주현 27
UPDATE TEST_T4
SET T3 = 27
WHERE T2 = '박주현' AND T1 = '2';
-- 전윤희 27
UPDATE TEST_T4
SET T3 = 27
WHERE T2 = '전윤희' AND T1 = '3';
COMMIT;
-- 홍길동 Y, SYSDATE 변경
UPDATE TEST_T4
SET T4 = 'Y', T5 = SYSDATE
WHERE T2 = '홍길동' AND T1 = '1';
SELECT * FROM TEST_T4 ORDER BY 1;
ROLLBACK;
6교시 (15:30-16:20)
- ISUD
-- MAX 값 채번 로직
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '신준현', 26, 'Y', SYSDATE);
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '한지윤', 26, 'Y', SYSDATE);
INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '김유진', 23, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '윤요한', 27, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '민경환', 27, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '송정인', 27, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '박성희', 27, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '우하나', 29, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '황수영', 23, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '김영제', 22, 'Y', SYSDATE);
--INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES ((SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T4), '김민준', 32, 'Y', SYSDATE);
SELECT NVL(MAX(NULL), 0) + 1 FROM DUAL;
CREATE TABLE TEST_T5 ( T1 VARCHAR2(20) PRIMARY KEY);
SELECT NVL(MAX(T1), 0) + 1 FROM TEST_T5;
SELECT HIREDATE FROM EMP ORDER BY HIREDATE;
SELECT MAX(HIREDATE) FROM EMP ORDER BY HIREDATE;
SELECT MIN(HIREDATE) FROM EMP ORDER BY HIREDATE;
SELECT * FROM TEST_T4 ORDER BY 1;
SELECT T4, T5 FROM TEST_T4 WHERE T1 = '3';
UPDATE TEST_T4
SET T4 = 'N', T5 = SYSDATE
WHERE T1 = '3';
COMMIT;
UPDATE TEST_T4
SET T4 = 'N', T5 = SYSDATE
WHERE T1 IN ('4', '5');
SELECT * FROM TEST_T4 WHERE T4 = 'Y' ORDER BY 1;
SELECT * FROM TEST_T4 WHERE T4 = 'N' ORDER BY 1;
SELECT * FROM TEST_T2;
/*
DELETE FROM 테이블
WHERE 컬럼명 = 값;
*/
SELECT * FROM TEST_T2 WHERE TC2_1 = '2.22';
DELETE FROM TEST_T2 WHERE TC2_1 = '2.22';
ROLLBACK;
SELECT * FROM TEST_T2 WHERE TC2_1 = '1.3';
DELETE FROM TEST_T2 WHERE TC2_1 '1.3';
DELETE FROM TEST_T2;
-- 10개 행 이(가) 삭제되었습니다.
TRUNCATE TABLE TEST_T2;
-- Table TEST_T2이(가) 잘렸습니다.
/*
DML Data Manipulation Language 테이블의 데이터를 저장, 수정, 삭제
INSERT, UPDATE, DELETE
DML 쿼리는 트랜잭션은 처리해야 한다. COMMIT ROLLBACK
1. 메모리에 적재된다.
2. ROLLBACK : 메모리에 적재된 내용을 삭제한다.
3. COMMIT : 메모리에 적재된 내용를 파일에 적재한다.
4. 외부 응용프로그램에서는 테이블 내용중 파일에 적재된 내용만 조회가 가능한다.
INSERT
1. 컬럼 갯수, 순서 와 값 갯수 순서 일치시키기
2. 데이터 타입 확인하기
3. 데이터 사이즈 확인하기
4. NULL 데이터 확인하기
UPDATE
1. 수정할 컬럼 및 데이터 확인하기
2. 조건절 꼭 확인하기
3. 수정 하고나서 수정 항목 확인하고 커밋 하기
DELETE
1. 삭제할 컬럼 및 데이터 확인하기
2. 조건절 꼭 확인하기
3. 삭제하고나서 삭제 항목 확인하고 커밋 하기
4. TRUNCATE 명령어를 실행하면 ROLLBACK 을 할 수 없다.
*/
7교시 (16:30-17:20)
- OracleTest_9
package a.b.c.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import a.b.c.common.OracleConnProperty;
import a.b.c.oracle.vo.EmpVO;
public class OracleTest_9 {
public int t4Insert(String t1, String t2, String t3) {
Connection conn = null;
PreparedStatement pstmt = null;
int nCnt = 0;
try {
conn = OracleConnProperty.getConnection();
String sql = "INSERT INTO TEST_T4 (T1, T2, T3, T4, T5) VALUES (?, ?, ?, 'Y', SYSDATE)";
pstmt = conn.prepareStatement(sql);
System.out.println("입력하기 >>> : \n" + sql);
pstmt.clearParameters();
pstmt.setString(1, t1);
pstmt.setString(2, t2);
pstmt.setString(3, t3);
// executeQuery()'s output: ResultSet
// WHEN USE "SELECT"
// executeUpdate()'s output : int
// WHEN USE DML(UPDATE INSERT DELETE)
nCnt = pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("에러가 >>> : " + e.getMessage());
}
return nCnt;
}
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
String t1 = "7";
String t2 = "윤요한";
String t3 = "27";
String t4 = "";
String t5 = "";
OracleTest_9 ot9 = new OracleTest_9();
int nCnt = ot9.t4Insert(t1, t2, t3);
if (nCnt == 1) {
System.out.println(nCnt + " 건 입력 성공");
} else {
System.out.println("입력 실패.");
}
}
}
8교시 (17:30-18:30)
- 자습
Notes
728x90