8:10 학원 도착. 올 겨울 첫눈이 엄청 많이 왔다. 나도 눈오리 만들고 싶은데 ㅠㅠ
오전 복습 시간에 해본 거 : ANSI JOIN 표현 확인하기
<9:30 1교시>
우리가 사용하는 ORACLE DATABSE 11g 는 네트워크 통신 포트로 디폴트값 1521을 사용한다고 한다.
윈도우가 이 1521포트를 방화벽으로 막지 않았다면 내 컴퓨터가 아닌 외부에서도 이 포트를 통해 데이터 베이스에 접속할 수 있다.
로그인할 때 입력하는 SQLPLUS가 1521 포트로의 접속을 가능하게 해주고, SQLPLUS는 더블클릭으로 실행할 수 있는 GUI가 아니고 명령 프롬프트로 직접 실행하는 프로그램이다.
■ 지난 시간 내용 복습
■ VIEW를 관리하는 데이터베이스 관리자가 잠깐 되어 보기 (아하 이런게 있구나)
<10:30 2교시>
외래키를 사용해서 참조된 부모 테이블은 자식 테이블보다 먼저 삭제될 수 없다.
(그러면 자식들이 미아가 된다!! 표현 엄청나!!)
■ 테이블의 변경 ALTER
ALTER 테이블에서 쓸 수 있는 여러 명령어
- 테이블의 칼럼의 데이터 타입 수정
MODIFY(칼럼 데이터타입) : 1개의 칼럼에 대한 데이터타입 수정
MODIFY(칼럼 데이터타입, 칼럼 데이터타입, ...) : 여러 개 칼럼에 대한 데이터타입 일괄 수정
- 테이블에 칼럼을 추가하는 것
ADD(칼럼 데이터 타입) : 1개의 칼럼 추가
ADD(칼럼과 데이터 타입, 칼럼과 데이터타입, ...) : 여러개 컬럼, 데이터 타입 일괄 추가
- 테이블에 칼럼 이름을 다시 붙이는 것
RENAME COLUMN 변경전칼럼이름 TO 변경후칼럼이름
- 테이블 이름 다시 짓기
RENAME 변경전테이블이름 TO 변경후테이블이름
- 테이블에 제약 조건을 추가하는 것
ADD CONSTRAINT 표이름_칼럼이름_제약조건약자 제약조건풀네임(칼럼이름)
- 테이블에 제약 조건을 삭제하는 것
DROP CONSTRAINT 표이름_칼럼이름_제약조건약자
- 테이블에 제약 조건을 비활성화 하는 것 : 개발 초기에 부여해둔 제약조건을 비활성화 시킴
DISABLE CONSTRAINT 표이름_칼럼이름_제약조건약자
- 테이블에 제약 조건을 활성화 하는 것 : 비활성화한 제약조건을 다시 활성화 시키는 것
ENABLE CONSTRAINT 표이름_칼럼이름_제약조건약자
SQL> CREATE TABLE TEST(NUM NUMBER);
Table created.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> ALTER TABLE TEST
2 ADD NAME varchar2(10);
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(10)
SQL> -- TEST 테이블에 ADDR VARCHAR2(20)을 추가해보세요
SQL> ALTER TABLE TEST
2 ADD ADDR VARCHAR2(20);
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(10)
ADDR VARCHAR2(20)
SQL> ALTER TABLE TEST
2 MODIFY NAME VARCHAR2(30)
3 ;
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(30)
ADDR VARCHAR2(20)
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(30)
ADDRESS VARCHAR2(20)
SQL> ALTER TABLE TEST
2 DROP ADDRESS;
DROP ADDRESS
*
ERROR at line 2:
ORA-00905: missing keyword
SQL> ALTER TABLE TEST
2 DROP(ADDRESS);
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(30)
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(30)
SQL> ALTER TABLE TEST
2 DROP(NAME)
3 ;
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> CREATE TABLE TEST(NUM NUMBER);
Table created.
SQL> ALTER TABLE TEST
2 ADD(NAME VARCHAR2(20), ADDR VARCHAR(30));
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(20)
ADDR VARCHAR2(30)
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(20)
ADDR VARCHAR2(30)
SQL> ALTER TABLE TEST
2 DROP(NAME, ADDR);
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> RENAME TEST TO TRY;
Table renamed.
SQL> DESC TRY
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM
테이블의 변경 여러가지 연습과 정답이 섞인 삽질
SQL> ALTER TABLE TEST
2 DROP(ADDRESS);
Table altered.
SQL> DESC TABLE;
ERROR:
ORA-00931: missing identifier
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(30)
SQL> ALTER TABLE TEST
2 DROP(NAME)
3 ;
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> DROP TABLE;
DROP TABLE
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> DROP TABLE TEST;
Table dropped.
SQL> CREATE TABLE TEST(NUM NUMBER);
Table created.
SQL> ALTER TABLE TEST
2 ADD(NAME, NEIGHBOR, ADDR);
ADD(NAME, NEIGHBOR, ADDR)
*
ERROR at line 2:
ORA-02263: need to specify the datatype for this column
SQL> ALTER TABLE TEST
2 ADD(NAME VARCHAR2(20) ADDR VARCHAR(30));
ADD(NAME VARCHAR2(20) ADDR VARCHAR(30))
*
ERROR at line 2:
ORA-00907: missing right parenthesis
SQL> ALTER TABLE TEST
2 ADD(NAME VARCHAR2(20), ADDR VARCHAR(30));
Table altered.
SQL> DESC TABLE
ERROR:
ORA-00931: missing identifier
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(20)
ADDR VARCHAR2(30)
SQL> ALTER TABLE TEST
2 DROP(NAME, ADDR);
Table altered.
SQL> DESC TEST
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> RENAME TEST TO TRY;
Table renamed.
SQL> DESC TRY
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
SQL> ALTER TABLE TRY
2 ADD (NAME VARCHAR2(6), PHONE VARCHAR2(10));
Table altered.
SQL> DESC TRY
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(6)
PHONE VARCHAR2(10)
SQL> ALTER TABLE TRY
2 ADD(REGDATE DATE);
Table altered.
SQL> ALTER TABLE TRY
2 ;
*
ERROR at line 2:
ORA-02210: no options specified for ALTER TABLE
SQL> DESC TRY
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(6)
PHONE VARCHAR2(10)
REGDATE DATE
SQL> RENAME TABLE TRY REGISTER
2 ;
RENAME TABLE TRY REGISTER
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> RENAME TRY TO REGISTER;
Table renamed.
SQL> DESC TRY
ERROR:
ORA-04043: object TRY does not exist
SQL> DESC REIGSTER
ERROR:
ORA-04043: object REIGSTER does not exist
SQL> DESC REGISTER
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(6)
PHONE VARCHAR2(10)
REGDATE DATE
SQL> ALTER TABLE REGISTER
2 RENAME REGDATE TO REGI;
RENAME REGDATE TO REGI
*
ERROR at line 2:
ORA-14155: missing PARTITION or SUBPARTITION keyword
SQL> ALTER TABLE REGISTER
2 RENAME COLUMN REGDATE TO REGI;
Table altered.
SQL> DESC REGISTER;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUM NUMBER
NAME VARCHAR2(6)
PHONE VARCHAR2(10)
REGI DATE
SQL>
LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록하는 조건 예제 풀어보는데 망했음 ㅋㅋ
SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN';
SP2-0734: unknown command beginning "ADD LOC CO..." - rest of line ignored.
SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
*
ERROR at line 1:
ORA-00906: missing left parenthesis
SQL> ALTER TABLE DEPT2
2 ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
*
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option
SQL> ALTER TABLE DEPT2
2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
*
ERROR at line 2:
ORA-00906: missing left parenthesis
SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ALTER TABLE DEPT2
2 ADD CONSTRAINT DEPT2_LOC_CK CHECK(LOC IN('SEOUL', 'BUSAN'));
Table altered.
SQL>
SQL> -- 제약 조건 추가
SQL> ALTER TABLE DEPT2
2 ADD CONSTRAINT DEPT2_DEPTNO_PK PRIMARY KEY(DEPTNO);
Table altered.
SQL> -- 제약 조건 비활성화 하기 : 프로젝트 시작할 때 부여해둔 제약 조건을 꺼두기
SQL> ALTER TABLE DEPT2
2 DISABLE CONSTRAINT DEPT2_DEPTNO_PK;
Table altered.
SQL> --제약 조건 활성화 하기 : 프로젝트 진행 중 꺼뒀던 제약 조건 다시 활성화 하기
SQL> ALTER TABLE DEPT2
2 ENABLE CONSTRAINT DEPT2_DEPTNO_PK;
Table altered.
SQL> --제약 조건 삭제
SQL> ALTER TABLE DEPT2
2 DROP CONSTRAINT DEPT2_DEPTNO_PK;
Table altered.
<11:30 3교시>
■ 선생님 컴퓨터에 접속해서 데이터 추가할 수 있도록 해보기
① 원격접속 시작 : 방화벽 내리기
내컴퓨터가 아닌 외부 컴퓨터가 내 컴퓨터의 오라클에 접속할 수 있도록 하기 위해서는 방화벽이 외부의 컴퓨터를 들여보낼 수 있게 해주는 방법이 필요하다.
내 컴퓨터의 오라클에 외부의 컴퓨터를 접속하게 해주기 위해선 방화벽의 인바운드 규칙을 설정할 필요가 있다.
인바운드 규칙을 설정하는 방법은 다음과 같다.
방화벽 열기 > 윈도우 검색창에 방화벽 검색 > 제어판의 방화벽 상태 확인 클릭 > 고급설정 클릭 > 인바운드 규칙 클릭 > 우측의 인바운드 규칙 하단의 새규칙 클릭 > 포트를 누르고 다음 클릭 -> TCP(일반 인터넷) 누르고 다음 클릭 -> 특정로컬포트에 1521 입력하고 다음 클릭 -> 연결허용하고 다음 클릭 -> 모두 선택 하고 다음 클릭 -> 이름입력(일단 테스트니까 아무렇게나 입력해도 됐지만 실제로 하게 되면 뭔가 관련 이름 해야겠지) > 마침 => 이후에 인바운드 목록에 방금 만든 인바운드 규칙이 뜸
② 원격접속하려는 PC의 IP 확인하기
명령 프롬프트에서 ipconfig를 엔터치면 자신의 컴퓨터의 IP를 확인할 수 있다. (맥OS면 ifconfig를 대신 입력해야 한다고 함)
IP 주소는 iPv4의 주소를 읽어서 192.168.X.XXX 이렇게 10자리로 구성된다. 이 IP주소는 가상 IP로, 컴퓨터를 재부팅하면 뒤에 X 부분 네 자리는 랜덤으로 채워진다고 한다.

③ 원격접속하기
원격 접속하려는 PC에 인바운드 규칙이 생성돼 있으면 아래와 같이
계정/비밀번호@IP주소:포트번호/XE <= SCOTT/TIGER@192.168.X.XXX:1521/XE
를 입력하면 원격 접속 된다.
내가 INSERT로 입력한member_seq.nextval, 거북, 서울을 commit 하면
선생님의 컴퓨터의 scott 계정의 table에 추가된다.
Microsoft Windows [Version 10.0.26100.2454]
(c) Microsoft Corporation. All rights reserved.
C:\Users\acorn>SQLPLUS SCOTT/TIGER@192.168.X.XXX:1521/XE
SQL*Plus: Release 11.2.0.2.0 Production on 수 11월 27 12:02:54 2024
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> -- 선생님 컴퓨터 MEMBER 테이블에 본인의 정보를 inserT 하고 COMMIT 해보세요
SQL> INSERT INTO MEMBER
2 (NUM, NAME, ADDR)
3 VALUES
4 (MEMBER_SEQUENCE.NEXTVAL, 거북, '서울');
(MEMBER_SEQUENCE.NEXTVAL, 거북, '서울')
*
ERROR at line 4:
ORA-00984: column not allowed here
SQL> INSERT INTO MEMBER
2 (NUM, NAME, ADDR)
3 VALUES
4 (MEMBER_SEQ.NEXTVAL, '거북', '서울');
1 row created.
SQL> COMMIT
2 ;
Commit complete.
내가 만든 내 테이블에 선생님이 접속해서 코드를 입력해주시기도 했는데,
이 전에 내가 두 개 row를 입력했던 내용을 commit하지 않고 창을 닫았었는데,
선생님과 옆에 앉은 수강생이 내 컴퓨터에 원격 접속하여 데이터를 insert하고 갔는데,
sequence의 특징을 확인할 수가 있었다.
개인정보 보호를 위해 입력된 name, addr 에 입력된것만 바꿨는데 내가 입력 전에 insert 했던 1,2 두 개의 row가 commit되지 않았음에도 sequence가 이미 번호를 부여해버리고 현재 번호가 3이 되어버린 탓에 선생님께서 번호 부여하셨을 때엔 3, 옆자리 수강생이 했을 때엔 4가 부여된 것이었다!
SQL> select * from member;
NUM NAME ADDR
---------- ------------------------ --------------------------------
3 선생님 XX동
4 옆자리 XX동
■ VIEW 권한 부여하고 만들기
VIEW는 테이블로부터 참고한 내용들을 보여주는 가상의 테이블로, 원래 사용하는 목적은 테이블에 포함된 기밀/민감 정보들을 가려서 보여주기 위함+단일테이블의 조인의 편리성 때문이라고 한다.
① GRANT CREATE VIEW
system 계정으로 로그인 해서 grant create view to 계정; 명령을 통해 view를 만들 수 있는 권한을 부여한다.
② VIEW (테이블) 다루기
VIEW는 다시 말하지만 임의의 테이블 역할을 하는 임시표이다.
집계함수로 된 다중행 데이터는 특별한 명령 없이는 바로 VIEW로 선택되고 만들어질 수 없어서, 보통 VIEW는 단일행으로 이루어진 표이다. 그래서 VIEW에서 변경한 내용이 TABLE에도 적용될 수 잇는데, 이를테면 VIEW에서 삭제한 내용이 TABLE에서도 동일하게 삭제되는 것이다.
단, VIEW를 만들 때 JOIN으로 여러 개의 테이블을 합쳤다면 이 VIEW는 READ ONLY가 되어서 변형이 불가하다.
SQL> CREATE VIEW MEMBER_VIEW AS
2 SELECT NUM, NAME
3 FROM MEMBER;
CREATE VIEW MEMBER_VIEW AS
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> CREATE VIEW MEMBER_VIEW AS
2 SELECT NUM, NAME
3 FROM MEMBER;
View created.
SQL>
SQL> CREATE VIEW EMP_VIEW as
2 select empno, ename, deptno
3 from emp;
View created.
SQL> desc view emp_view
Usage: DESCRIBE [schema.]object[@db_link]
SQL> desc emp_view;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
DEPTNO NUMBER(2)
SQL> select * from emp_view;
EMPNO ENAME DEPTNO
---------- -------------------- ----------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7902 FORD 20
EMPNO ENAME DEPTNO
---------- -------------------- ----------
7934 MILLER 10
12 rows selected.
SQL> create view my_view as
2 select empno, ename, sal, deptno, dname
3 from emp
4 join dept using(deptno);
View created.
SQL> select * from my_view;
EMPNO ENAME SAL DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
7369 SMITH 800 20
RESEARCH
7499 ALLEN 1600 30
SALES
7521 WARD 1250 30
SALES
EMPNO ENAME SAL DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
7566 JONES 2975 20
RESEARCH
7654 MARTIN 1250 30
SALES
7698 BLAKE 2850 30
SALES
EMPNO ENAME SAL DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
7782 CLARK 2450 10
ACCOUNTING
7839 KING 5000 10
ACCOUNTING
7844 TURNER 1500 30
SALES
EMPNO ENAME SAL DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
7900 JAMES 950 30
SALES
7902 FORD 3000 20
RESEARCH
7934 MILLER 1300 10
ACCOUNTING
12 rows selected.
<12:30 4교시>
오늘 1,2,3교시때 했던 내용 손에 익게 복습하라고 시간 주셨음.
블로그 2,3교시 때 한거 내용 정리하러 올라감.
+ 정리 다 못해서 8교시에도 하는 중
'자바풀스택 과정 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 11/28 오전 기록 006-1 (2) | 2024.11.28 |
---|---|
자바 풀 스택 11/27 오후 기록 005-2 (1) | 2024.11.27 |
자바 풀 스택 11/26 오후 기록 004-2 (0) | 2024.11.26 |
자바 풀 스택 11/26 오전 기록 004-1 (0) | 2024.11.26 |
자바 풀 스택 11/25 오후 기록 003-2 (0) | 2024.11.25 |