본문 바로가기

[PL/SQL] SELECT & CURSOR NO_DATA_FOUND, TOO_MANY_ROWS 만 기억해둬! INTO를 사용하는 것 기억 OPEN CUR_EMP; → IS 이하의 SQL을 EXECUTE 한다는 의미 → DBMS 서버 내에 ResultSet이 만들어진다. (실행할 경우) CURSOR에 있는 값을 선언한 변수에 넣는 것이 fetch CUR_EMP 은 ResultSet 을 가리킴 result set은 테이블이 아니고 서버 내부에 선언된 메모리 덩어리임 close CUR_EMP 하면 result set이 사라짐 CUR_EMP%ROWCOUNT → % 속성 연산자 / 커서를 통해 FETCH한 RECORD 갯수를 화면에 출력하기!! (몇 건의 데이터가 출력이 되었는지 확인하기 위함) INSERT가 암시적인 커서 명시적 커서만 알고 있으면 돼!..
[PL/SQL] 알고 있어야 하는 필수 상식 Transaction Type 1) OLTP (Online Transaction Processing) 은행 9시 ~ 4시반 일어나는 작은 단위의 Transaction 2) DSS (Decision Support System) ( = Batch processing ) 집계, 통계 - 일괄 처리 ( 은행 4시반 이후 ) 3) DTP (Distributed Transaction Processing) (= 분산처리 ) 1) Statement 2) Prepared Statement 3) Callable Statement
[PL/SQL] Data Type 레코드만 보면 돼! 레코드 예시 레코드는 커서를 이해하기 위해 배울 뿐이지 레코드 타입을 직접 정의하여 쓰는 경우는 없다. 알아두세요. - 로그 남길 때 SQLCODE , SQLERRM 존재하지 않는 데이터를 검색할 경우 -> NO_DATA_FOUND 라는 EXCEPTION이 발생 EMPNO의 변수의 타입을 참조하여 변수를 선언하여라 %는 참조연산자 SELECT 시에는 INTO 가 와야 함. REC_EMP 가 없으면 굉장히 불편하죠 ? 변수들을 개별 정의해야 한다. 레코드명.필드명임 %ROWTYPE 이렇게 선언하면 REC_EMP는 레코드로 변환됨
[PL/SQL] 개요 및 주요 특징 DECLARE와 BEGIN 사이를 선언부라고 한다. := 을 통해 초기화를 하지 않으면 DEPTNO 에는 NULL이 들어간다 CURSOR 커서이름 IS 이하의 SELECT가 CURSOR의 정의한다. (CURSOR는 PL/SQL을 쓰는 이유) SELECT를 하게 되면 DBMS 내부에 RS(Result Set)이 만들어짐. BEGIN, EXCEPTION 실행부 EXCEPTION, END 예외처리부 예외처리 ? CATCH와 LOG (2) 통합성 - 중요 PL/SQL에서 BLOCK 이란? [BLOCK] DECLARE BEGIN EXCEPTION END Anonymous 블럭은 이름이 없는 블럭 이름을 붙이는 이유? 불러서 계속 쓸려고 (3) 성능 PL/SQL은 전체 BLOCK을 한 번에 DBMS 서버에 보낸다 ..
오라클 실습 - VIEW VIEW의 정의는 시스템 카탈로그에 저장된다. 뷰는 데이터를 가지고 있지 않고, 정의되는 SQL 구문만 데이터 딕셔너리 (= 시스템 카탈로그 ) 에 저장돼.. 오브젝트는 맞지만 세그먼트는 아니다 뷰를 통해 원본 테이블의 이외의 칼럼을 조회하는 것을 불가능하다. → 보안성을 높일 수 있음 SELECT * FROM USER_VIEWS; 뷰는 실제 테이블이 아니고 logical table Materialized View 는 M뷰라고도 함 - 일반 뷰와 다르게 뷰가 데이터를 가지고 있음 M 뷰는 변경 주기를 결정 (실시간 변경되거나 주기적으로 변경) ( = CTAS와 유사 - 하지만 CTAS는 동기화를 안해서 원본 데이터가 변해도 변하지 않음) 왜 씀 ? 데이터의 양이 많아질 때 데이터를 동기화하여 빠르게 집계..
오라클 정리 (190612) Data Dictionary ( = System Catalog ) - DBMS가 운영하기 위해 필요한 정보를 저장한 테이블들과 뷰들의 집합 - 읽기 전용 (인간에게는) - 수정 (DBMS의 역할) - DBA USER, OBJECT ... USER_TABLES - 내가 소유한(=만든) 모든 것 (Owner) ALL_TABLES - 내가 접근 가능한 모든 것 (Accessible) DBA_TABLES - DBMS 내에 존재하는 모든 것 DBA_OBJECTS -> DBA를 ALL로 바꾼다 데이터베이스 소유자 계정과 개발자 계정을 구분 - 안전성을 위해서 테이블, 인덱스는 object인 동시에 segment 시퀀스, 시너님(synonym), 뷰(view) 은 object o, segment x 그래서 시퀀스, ..
오라클 - 기본키와 외래키 (190611) desc customer4 로는 primary key 구분이 안돼 하지만 select * from user_constraints 로 조회를 할 경우 나옴 CREATE TABLE CUSTOMER5 AS SELECT * FROM CUSTOMER4 로 했을 시 PRIMARY KEY가 COPY가 안돼.. DATA DICTIONARY - 시험 나옴 DBA_ ALL_ USER_ SELECT * FROM USER_TABLES; -> 내 소유의 모든 테이블을 조회하기 Primary key, Foreign key 선언적 무결성 제약사항이라고 한다 - check 제약사항 - 1. 선언적 무결성 제약사항 (p.k, f.k 로 가능) -> db서버 2. 트리거 -> db서버 3. application logic - 데이터 무..
오라클 - 제약사항 (190611) 1. primary key는 unique key + not null -> 데이터가 반드시 존재해야 한다 주민번호 ? 예를 들어 성인 웹 사이트에서 주민번호는 대표성을 지니므로 primary key가 될 수 있음 Primary key도 unique index가 자동으로 생성된다. Primary key VS Unique key 가장 큰 차이점은 테이블에 Primary key는 하나만 정의할 수 있음. 공공기관 ? 주민번호가 대표성을 지닐 수 있음. 반면 네이버나 페이스북은 이메일, ID가 대표성을 지님. 즉, Business Rule ( 도메인의 영역 ) 에 따라 Primary key 가 결정된다. 2. unique key 데이터의 고유성을 보장하면서 null을 허용 (포털 사이트의 회원가입) unique ..