전체 글 97

Oracle PL/SQL - Trigger

* 사용 예시 - 한 테이블에 변경이 발생하면 동시에 다른 테이블들에 변경을 가한다. - 데이터의 변경이 데이터베이스에 저장되기 전에 값을 검증하고 필요시 다른 값으로 변경한다. - 조건 판단에 따라서 이벤트의 발생을 허용하거나 차단한다. - 발생한 이벤트에 대한 로그를 남긴다. - 자동으로 계산 칼럼의 값을 생성한다. - 뷰에 대한 DML문 수행 시 다른 테이블을 변경한다. - 제약 조건으로 생성할 수 없는 복잡한 업무 규칙을 적용하여 데이터의 무결성을 보장한다. - 분산 DB 환경에서 부모, 자식 테이블 간의 참조 무결성을 보장한다. 1. 선언 CREATE OR REPLACE TRIGGER 트리거명 발생시점 DML이벤트 [ OF 칼럼명 ] ON 테이블 또는 뷰 참조절 FOR EACH ROW WHEN ..

프로그래밍 2021.09.28

Oracle PL/SQL - Stored Subprogram

1. 종류 종류 설명 독립형 저장 서브프로그램 함수 결괏값을 반환함 프로시저 결괏값을 반환하지 않음 패키지 타입, 상수, 변수, 예외, 커서 , 서브프로그램 등을 묶어서 모듈화한 저장 서브프로그램 트리거 특정 이벤트 발생 시 자동적으로 호출되는 서브프로그램 객체 타입 관계형 DB에서 객체 지향 프로그래밍을 가능하게 하는 저장 서브프로그램(ADT(Abstract Data Type), 사용자 정의 타입) 2. 컴파일 * 오류 조회 CREATE OR REPLACE FUNCTION get_wage(a_empno NUMBER) RETURN MUMBER IS v_wage NUMBER; BEGIN SELECT sal + NVL(comm, 0) comm INTO v_wage FROM emp WHERE empno = a..

프로그래밍 2021.09.28

Oracle PL/SQL - 동적 SQL

동적 SQL 사용 방법 실행 중 변경 가능한 문자열 변수 또는 문자열 상수로 제공된 SQL문을 실행 사용 예 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM emp' INTO v_cnt; 사용 가능한 SQL 모든 SQL문(DML, TCL, DDL, DCL) 장점 - 사전에 정의되지 않은 SQL을 실행 시에 확정하여 실행할 수 있다. - DML과 TCL외에도 DDL, DCL을 사용할 수 있다. 단점 프로그램을 작성하기가 복잡하다. 용도 - SQL이 몇 개 문장으로 고정될 수 없는 경우 - SQL이 실행될지 예측할 수 없는 경우 * 실행 방법 1. EXECUTE IMMEDIATE문을 사용하여 SQL을 실행하는 방법 2. 커서 변수를 사용하여 OPEN, FETCH, CLOSE문으로 SE..

프로그래밍 2021.09.24

Oracle PL/SQL - Cursor

1. 정의 * DB 서버의 SGA(System Global Area)에 저장되어 있는 특정 쿼리를 실행하기 위한 정보를 저장하는 PGA(Program Global Area) 내부의 Private SQL Area에 대한 포인터 2. 묵시적 커서와 명시적 커서 묵시적 커서(Implicit Cursor) 명시적 커서(Explicit Cursor) 커서 선언 없음 있음 사용 시 복잡도 단순 복잡 커서 제어 불가능 가능 유연성 낮음 높음 사용 가능한 SQL 유형 SELECT, INSERT, UPDATE, DELETE, MERGE SELECT 커서 속성 참조 SQL%커서속성 커서명%커서속성 전형적인 사용 방법 즉시 실행 OPEN, FETCH, CLOSE 3. 명시적 커서 * 명시적 커서는 DECLARE절에 CURS..

프로그래밍 2021.09.24

Oracle PL/SQL - Record

* 레코드를 사용하면 데이터 타입이나 길이가 다른 여러 변수들을 논리적으로 하나의 그룹으로 묶을 수 있다. 1. 선언 TYPE 타입명 IS RECORD 필드목록; 레코드변수명 타입명; 필드목록은 레코드의 필드 목록을 선언하는 부분으로, 형식은 CREATE TABLE문의 칼럼 선언가 유사한 형태를 가진다. (예시) DECLARE TYPE emp_type IS RECORD( empno NUMBER(4) NOT NULL := 0, ename emp.ename%TYPE, job VARCHAR2(9) ); v_emp emp_type; BEGIN v_emp.empno := 9000; v_emp.ename := '홍길동'; v_emp.job := '의적'; DBMS_OUTPUT.PUT_LINE('EMPNO = '||..

프로그래밍 2021.09.23

Oracle PL/SQL - Collection

※ Oracle PL/SQL은 컴포지트 데이터 타입으로 컬렉션과 레코드를 지원한다. - 컬렉션(Collection): 동일 타입 데이터의 반복 - 레코드(Record): 서로 다른 타입의 데이터 모음 1. 컬렉션 타입의 종류 Associative Array VARRAY Nested Table 컬렉션 항목의 개수 미지정 지정 미지정 인덱스 유형 문자열 또는 정수 정수 정수 초기화되지 않은 상태 Empty NULL NULL ADT(Abstract Data Type) 정의 불가능 가능 가능 - VARRAY, Nested Table 컬렉션 변수는 사용하기 전에 반드시 초기화해야 한다. * 컬렉션 타입과 대응되는 일반 자료 구조 일반 자료 구조 PL/SQL 컬렉션 타입 해시 테이블, 비순서 테이블 Associat..

프로그래밍 2021.09.23

Eclipse Spring Package - Git 연동

개인 프로젝트로 진행한 Java Spring 프로젝트를 Github에 연동해보고자 한다. 다른 블로그의 글을 보며 시도하는 중에 기록해놓는다면 추후 다시 확인해볼 수 있을 것이라 생각하여 기록한다. 먼저, Git에서 Remote 저장소를 예시로 하나 만들어준다. Remote 저장소를 Local로 가져와서 연동한 후, Eclipse를 실행해본다. 1. 연동하고 싶은 프로젝트에 마우스 오른쪽 버튼을 눌러 [Team - Share Project]를 누른다. 2. Create를 눌러 저장소를 선택해준다. 위에서 가져온 clone 위치를 지정한다. 3. Finish를 눌러 완료한다. 4. Commit 후 Push를 해보자. 프로젝트에 마우스 오른쪽 버튼 클릭 [Team - Commit] 그러면 아래의 화면이 보인..

프로그래밍 2021.08.14

[빅데이터 분석기사] 빅데이터 분석기사 자격증 취득

국비 교육 들으면서, 자소서 쓰느라 결과 발표날이 오늘인 것을 까먹고 있다가 저녁 먹기 전 생각나서 사이트에 들어갔다. 결과는... ※ 느낀 점 1 사실 실기는 걱정반, 기대반이였다. 아무래도 코딩을 하던 사람이니까 조금은 유연하게 상황에 대처할 수 있다는 것이 첫째고, 문제집과 기출 문제가 사이트에서 준 기본문제(라고 해봐야 단답형 1문제, 작업형 1유형 1문제, 2유형 1문제 였었나...?)가 전부여서 넓은 범위의 공부를 해야한다는 것이 둘째 이유다. 실기 준비 전, ADsP를 준비한 것은 사실상 실기의 단답형도 준비하고자 하는 의도도 있었고, 다행히 둘 다 취득했다. 2 작업형 제2유형이 말이 많을 것이라 생각했고, 부분 점수도 있기 때문에 40점 만점을 받기는 어렵고 20점으로 생각했다. 그런데,..

자격증 2021.07.16

[MyBatis] ORM 프레임워크 활용(1)

※ MyBatis(ORM Framework) - ORM: Object Relational Mapping - DB의 한 행과 객체를 연결해주는 프레임워크 * application.properties 내의 spring.datasource - Connection Pool(DB 연결 객체 Connection을 보관하는 장소) / 다수의 사용자가 접근하면, 다수의 Connection이 생성된다. - Connection을 연결하고 해제하는데 많은 시간이 걸리는데, 규모가 큰 기업의 경우 이런 시간을 줄이기 위해 Pool을 사용한다. - Connection을 미리 제작해놓고, 사용자가 사용할 때 제공. 미리 제작해놓은 장소가 Pool. (장점) Connection을 실시간으로 생성할 필요가 없다. 1. Java Ec..

프로그래밍 2021.07.06

[MySQL] With Recursive 문, 세션 변수 활용, Pagination

1. 기본 테이블 형태 select * from employee; 2. Employee 테이블에서 직원 번호, 직원 이름과 직원의 상사 번호와 상사 이름을 출력 * With 절을 사용하지 않은 쿼리 select b.empno, b.ename, b.mgr, a.ename from employee a right outer join employee b on a.empno = b.mgr; * With 절(임시 테이블) with t1 as (select empno, ename, mgr from employee), t2 as (select empno, ename from employee) select t1.empno, t1.ename, t1.mgr, t2.ename from t1 left outer join t2 ..

프로그래밍 2021.07.06