RDB/Oracle 26

[오라클]패키지, 트리거(1)

- 여러 개의 프로시저를 하나로 묶을 수 있다. PACKAGE : 프로시저의 묶음 - package와 body로 구성되어 있음 - FOR EACH ROW : 이걸 사용안하면 테이블 레벨 트리거에서 NEW 혹은 OLD 참조는 허용되지 않습니다. 오류 - NEW 사용자가 지정한 작업의 실행 후 데이터 - OLD 사용자가 지정한 작업이 실행 전 데이터 패키지 생성(5개의 프로시저를 하나로 묶음) CREATE OR REPLACE PACKAGE SAWON_PACK IS PROCEDURE SANO_OUT; PROCEDURE SANAME_OUT; PROCEDURE BUNO_OUT; PROCEDURE JIK_OUT; PROCEDURE PAY_OUT; END; 패키지 바디 생성(각각의 프로시저를 안에 정의함) CREAT..

RDB/Oracle 2019.01.22

[오라클]DML 프로시저, 함수, 반복문, 예외처리,커서

- 우리가 가장 많이 사용하는 프로시저는 DML PROCEDURE(INSERT, UPDATE, DELETE 시키는 프로시저.) 1. INSERT PROCEDURE 1-1 테이블 생성 CREATE TABLE TEST (A NUMBER(10), B NUMBER(10), C DATE DEFAULT SYSDATE); DESC TEST; 1-2. 데이터 삽입 CREATE OR REPLACE PROCEDURE P_EX (FIRST IN NUMBER, SECOND IN NUMBER) IS BEGIN INSERT INTO TEST(A,B) VALUES (FIRST, SECOND); COMMIT; END; 1-3. 프로시저 실행 후 조회 EXECUTE P_EX(10,20); SELECT * FROM TEST; 1-4. ..

RDB/Oracle 2019.01.21

[오라클]인덱스, 시퀀스, PL/SQL-프로시저의 개념, 스크립트

프로젝트 진행시 DB모델링이 제일 먼저 진행되야함 (TABLE생성(컬럼명, 테이블명, 제약조건 다 정해야됨)) INDEX 1. INDEX 생성 방법 2. INDEX 리스트 확인 이 리스트에 PK도 존재하는 것을 볼수있음. PK생성시 동일한 이름의 PK와 INDEX가 동시에 생성됨. 즉, PRIMARY KEY 를 만들게되면 INDEX도 같이 만들어진다. 인덱스의 종류는 CLUSTERED INDEX와 NON-CLUSTERED INDEX 두가지 오라클은 NON-CLUSTERED 형태의 인덱스이므로 정렬이 되지 않음. MS-SQL은 CLUSTERED 인덱스므로 정렬되어 저장됨 # INDEX에 해당하는 컬럼 조회 3. NON-CLUSTERED INDEX ① 테이블 생성 ② 데이터 삽입 ③ 테이블 조회 : 정렬되지..

RDB/Oracle 2019.01.18

[오라클]제약조건, DATA DICTIONARY, VIEW, SYNONYM

[제약조건] 제약조건 조회 [PRIMARY KEY] 1. COLUMN LEVEL : 컬럼 생성시 제약조건 기재. 2. TABLE LEVEL : 컬럼 생성후 마지막으로 제약조건 기재. 좀 더 직관적으로 볼 수 있어서 테이블 레벨로 만드는 것을 더 선호함 (1보다 2선호) [FOREIGN KEY] ▲CUSTOMER TABLE ▲ORDERS TABLE ▲CATALOG1 TABLE 1. 참조키 제약조건 ALTER를 통해 수정 - ORDERS 테이블의 ‘NO’열을 외래키로 가져옴 2. 참조키 제약조건 테이블 생성시 입력 - ORDERS 테이블의 ‘NO’열을 외래키로 가져옴 3. ORDERS 테이블에 NO 값이 없다면 참조무결성 위반으로 입력 불가능함 - 무결성 제약조건(KIM.CATALOG1_NO_FK)이 위배되..

RDB/Oracle 2019.01.16

[오라클]DCL, OBJECT 권한, ROLE

데이터베이스를 구축하고 난 뒤 app 구현함. 이 때, 원래 DB를 수정하는 것이 아님. 한 컬럼이 지워지면 코딩상에서는 getter, setter 뿐만 아니라 변수도 없어지기 때문에 변동이 엄청 큼. 하지만 회사에서는 비일비재. L테이블. 최악의 테이블. NULL이 들어가 있는 상태의 테이블. 데이터가 이미 들어가있을때 나중에 컬럼을 추가. USER TABLESPACE 안에 USER01.DBF 파일 존재(오라클이 관리하지만 OS의 영역). 그 파일 안에 MANAGER, SALESMAN, SALESMAN1 과 같은 테이블들이 존재(물리적으로 오라클 DB영역) 일반적으로 트랜잭션로그파일의 내용을 볼 수 없음. SYS계정에서 테이블 생성시 기본 Default값은 SYSTEM.tablespace 에 저장된다...

RDB/Oracle 2019.01.16

[오라클]서브쿼리, 무결성, 트랜잭션, DDL, 정규화

▶ PC를 킨 후, 오라클이 실행되지 않을 때 서비스 프로그램 킨 후 콘솔 프로그램 상태가 시작됨인지 확인. SUBQUERY를 활용하여 데이터 UPDATE --주소가 제주도인 고객의 월급을 500원 인상 --해당 데이터 조회 SELECT * FROM EXCOMPANY WHERE USERID IN(SELECT USERID FROM EXCUSTOM WHERE ADDR1 = '제주도'); --해당 데이터 변경 UPDATE EXCOMPANY SET PAY=PAY+500 WHERE USERID IN(SELECT USERID FROM EXCUSTOM WHERE ADDR1 = '제주도'); --UPDATE SELECT * FROM PERSONNEL WHERE PNO = 1111; UPDATE PERSONNEL SET..

RDB/Oracle 2019.01.16

[오라클] 예제풀이 5

1. EMP 테이블에서 Blake와 같은 부서에 있는 모든 사원의 이름과 입사일자를 출력하는 SELECT문을 작성하시오.SELECT ENAME,HIREDATE FROM EMPWHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'BLAKE'); 2. EMP 테이블에서 평균 급여 이상을 받는 모든 종업원에 대해서 종업원 번호와 이름을 출력하는 SELECT문을 작성하시오. 단 급여가 많은 순으로 출력하여라. SELECT EMPNO, ENAME FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP); 3. EMP 테이블에서 이름에 “T”가 있는 사원이 근무하는 부서에서 근무하는 모든 종업원에 대해 사원 번호,이름,급여를 출력하는 SELEC..

RDB/Oracle 2019.01.16

[오라클]하위쿼리, 상관쿼리, 치환변수

- Subquery Subquery와 JOIN은 서로 바꿔서 작성가능 --SUBQUERY(하위쿼리) SELECT USERID,COMPANY,DEPT,PAY,AVG(PAY) FROM COMPANY; --COMPANY,DEPT,PAY가 다중값이므로 GROUP BY로 묶을 수 없다 --얻고자 하는 데이터를 위해서 하나의 쿼리로 실행이 돠야 함. 아래의 두 쿼리는 총 2번 실행. 이렇게 사용하면 안됨 SELECT ROUND(AVG(PAY)) FROM COMPANY; --결과 : 1778763 SELECT USERID,COMPANY,DEPT,PAY,1778763 평균 FROM COMPANY; --평균이 변동되면 잘못된 데이터가 됨 --데이터가 바뀌어도 평균에 반영되므로 문제 없음. --SUBQUERY는 SELEC..

RDB/Oracle 2019.01.16

[오라클] 예제풀이 4

1. EMP 테이블에서 인원수,최대 급여,최소 급여,급여의 합을 계산하여 출력하는 SELECT 문장을 작성하여라. SELECT COUNT(*) 인원수, MAX(SAL) "최대 급여",MIN(SAL) "최소급여",SUM(SAL) 급여총계 FROM EMP; 2. EMP 테이블에서 각 업무별로 최대 급여,최소 급여,급여의 합을 출력하는 SELECT 문장을 작성하여라. SELECT JOB 업무,MAX(SAL) "최대 급여",MIN(SAL) "최소급여",SUM(SAL) 급여총계 FROM EMP GROUP BY JOB; 3. EMP 테이블에서 업무별 인원수를 구하여 출력하는 SELECT 문장을 작성하여라. SELECT JOB 업무,COUNT(*) 인원수 FROM EMP GROUP BY JOB; 4. EMP 테이블에..

RDB/Oracle 2019.01.16

[오라클] JOIN, OPERATOR

JOIN : 2개이상의 테이블에서 데이터 검색하는 방법 1. INNER JOIN(EQUI JOIN) 가장 일반적으로 사용하는 Equality Condition(=)에 의한 조인이다. Equi join의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋다. 2. NON-EQUI JOIN(오라클에만) 테이블의 어떤 column도 Join할 테이블의 column에 일치하지 않을 때 사용하고, 조인조건은 동등(=)이외의 연산자를 갖는다. BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN 거의 사용하지 않는다 3. OUTER JOIN Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 데이터를 반환하지 못한다. 동일 조건에서 조인 조건을 만족..

RDB/Oracle 2019.01.16
반응형