IT, 프로그래밍/Database (Oracle)
-
[PL/SQL] 동적 SQL(Dynamic SQL) - NDS 방식IT, 프로그래밍/Database (Oracle) 2019. 1. 25. 10:42
SQL문 사용 시에 동적으로 계속 바뀌는 경우가 있다.예를 들어 학생 테이블에서 검색하는 경우,조건에 따라 학생의 번호만으로 찾을 수도 있고 혹은 이름으로 찾을 수도 있는데이것을 정적으로 사용하면 같은 SQL문을 중복해서 사용해야 한다.이럴때 SQL문을 문자열로 저장 해 놓고 자주 변하는 조건만 바꿔주면 재사용성도 높아지고 유지보수도 편해진다. 동적 SQL을 사용하는 방법은 원시동적 SQL을 사용하는 방식과 DBMS_SQL이란 시스템 패키지를 사용하는 방식이 있는데 SQL문을 문자열 형태로 만들어 실행한다는것은 같지만 구조와 사용법은 약간 다르다. NDS (Native Dynamic SQL) EXECUTE IMMEDIATE문 EXECUTE IMMEDIATE SQL문_문자열[ INTO OUT변수, OUT변..
-
[PL/SQL] 패키지(Package)IT, 프로그래밍/Database (Oracle) 2019. 1. 25. 09:00
패키지 (Package) : 논리적 연관성이 있는 PL/SQL 타입, 변수, 상수, 서브 프로그램, 커서, 예외 등의 항목을 묶어 놓은 객체.컴파일 과정을 거쳐 DB에 저장되고, 다른 프로그램 (타 패키지, 프로시저, 외부 프로그램 등)에서 패키지의 항목을 참조, 공유, 실행할 수 있다. PL/SQL의 패키지는 자바의 Class 개념과 유사한데, 논리적 연관성이 있는 프로시저와 함수, 변수와 상수등을 정의한 부분에서 그러하다. 다만 자바에서 지원하는 상속의 개념은 없다. 패키지의 장점을 정리하면 아래와 같다. 1. 모듈화 기능2. 프로그램 설계의 용이성3. 캡슐화4. 성능 최적화 (메모리에 패키지 전체가 올라가 있으므로 안에 있는 부 프로그램 호출시 빠른 처리 가능) 패키지 구조 PL/SQL은 선언부와 ..
-
[PL/SQL] 컬렉션의 다양한 사용IT, 프로그래밍/Database (Oracle) 2019. 1. 24. 13:41
1. 사용자 정의 데이터 컬럼 자주 사용하는 컬렉션 타입을 미리 정의해 놓고 마치 VARCHAR2, NUMBER 같은 빌트인(Built-in)타입 처럼 사용할 수 있게 해주는 기능. 컬렉션에서는 VARRAY와 중첩 테이블이 사용이 가능하다.사용자가 정의한 컬렉션을 Global 하게 사용할 수 있다는 개념으로 생각하면 될 듯 하다. 객체(OBJECT) 타입은 컬렉션은 아니지만 객체 지향 프로그래밍의 클래스 개념과 유사하며, 상속도 가능하다. VARRAY : CREATE OR REPLACE TYPE 타입명 IS VARRAY (최대 크기) OF 데이터 타입; 중첩 테이블 : CREATE OR REPLACE TYPE 타입명 IS TABLE OF 데이터 타입; OBJECT : CREATE OR REPLACE 타입..
-
[PL/SQL] 컬렉션(Collection) - 메소드IT, 프로그래밍/Database (Oracle) 2019. 1. 23. 16:20
메소드명 메소드 타입 설명 DELETE Procedure 컬렉션 요소 삭제 TRIM Procedure VARRAY나 중첩 테이블의 끝에서 요소 삭제 EXTEND Procedure VARRAY나 중첩 테이블의 끝에서 요소 추가 EXISTS Function VARRAY나 중첩 테이블에 특정 요소가 존재하면 TRUE를 반환 FIRST Function 컬렉션의 첫 번째 인덱스를 반환 LAST Function 컬렉션의 마지막 인덱스를 반환 COUNT Function 컬렉션 요소의 총 수를 반환 LIMIT Function 컬렉션이 가질 수 있는 최대 요소의 수를 반환 PRIOR Function 특정 인덱스 직전의 인덱스를 반환 ( 어떤 요소의 바로 전에 있는) NEXT Function 특정 인덱스 직후의 인덱스를 ..
-
[PL/SQL] 컬렉션(Collection) - 개념IT, 프로그래밍/Database (Oracle) 2019. 1. 23. 09:12
Collection = 다양한 데이터 타입을 가질 수 있는 동시에, 여러 로우에 해당하는 데이터를 가질 수 있는 자료형. 특징 생성자를 이용해 초기화 가능빌트인 함수와 프로시저로 구성된 컬렉션 메소드 제공 1) 연관 배열(Associative Array) 키와 값으로 구성된 컬렉션. 키를 Index라고 부르기 때문에 Index-by 테이블 이라고도 함.자바에 있는 Map 구조에 대응되는 컬렉션이다. TYPE 이름 IS TABLE OF 값타입 INDEX BY 인덱스타입; 으로 정의하여 사용한다. 인덱스타입 = 키 타입임. 123456789101112131415DECLARE TYPE av_type IS TABLE OF VARCHAR2(40) INDEX BY PLS_INTEGER; vav_test av_typ..
-
[PL/SQL] 레코드 (Record)IT, 프로그래밍/Database (Oracle) 2019. 1. 18. 13:02
레코드 (Record) : 레코드란 여러 가지 데이터 타입을 가질 수 있는 복합형 구조의 데이터 타입이며, 하나의 행(Row)에 대응한다. C언어에서 구조체(struct)와 유사한 개념이다. 레코드는 선언 방식에 따라 커서형, 사용자 정의형, 테이블형 레코드로 나눌 수 있다. 1. 사용자 정의형 레코드 TYPE 레코드명 IS RECORD (필드명1 필드1 타입[ [NOT NULL] := 디폴트값 ],필드명2 필드2 타입[ [NOT NULL] := 디폴트값 ] ... );레코드변수명 레코드명; 1234567891011121314DECLARE TYPE dept_rect IS RECORD( department_id NUMBER := 1, --혹은 departments.department_id%TYPE depa..
-
[PL/SQL] 커서 (Cursor)IT, 프로그래밍/Database (Oracle) 2019. 1. 17. 16:10
커서란, SQL문을 처리한 결과 집합을 가리키는 일종의 포인터이다. (C에서 나오는 포인터 개념과 유사하다)이 결과 집합은 오라클 서버 프로세스 내부의 Private SQL Area라는 메모리 영역에 저장되는데,여기서 유의해야 할 점은 커서는 클라이언트 측 프로세스에서 가리키고 있다는 점이다.Private SQL Area는 특정 쿼리에 대한 결과를 저장하면서 캐싱 하는 역할을 하는데,한 세션 안에서 같은 쿼리를 반복적으로 호출한다면, 저장되어 있는 결과 집합을 반환하면서 자원 낭비를 최소화한다. >> 더 자세한 아키텍쳐를 알고 싶으면 여기를 참고
-
[PL/SQL] 트랜잭션 (Transaction)IT, 프로그래밍/Database (Oracle) 2019. 1. 17. 11:00
트랜잭션(Transaction)이란, 일관성 있는 상호작용을 위한 단위이다. 데이터베이스 시스템은 ACID (Atomicity, Consistency, Isolation, Durability)를 보장하기 위해 트랜잭션을 논리적 작업단위로 사용한다. 트랜잭션을 통해 데이터베이스는 항상 일관성 있는 상태를 유지해야 한다. 비유를 하자면, 돈을 입금하는 도중에 오류가 발생하여 거래가 취소되면 많은 문제가 생길 수 있다. 이를 위해 은행 거래에서는 완전히 거래가 끝났을시에 거래 정보를 확정하고, 오류가 발생하면 거래를 시작하기 전의 상태로 되돌린다. PL/SQL상에서 사용할 수 있는 트랜잭션은 아래와 같다. 1. COMMIT 데이터베이스 연산이 정확하게 종료되어 변경내역을 실제 데이터베이스에 반영한다.만약 DB..