본문 바로가기

분류 전체보기

(135)
Oracle PL/SQL 프로시저[ForAll] BluckCollet 커서를 오픈하여 SELECT 문을 실행할 때 OPEN-FETCH-CLOSE 구문을 데이터 1건씩 추출하며 , FOR LOOP를 이용하면 100건씩 추출한다 정해진 건수만큼 추출한 후에는 다음 데이터를 추출하기 위해 Fetch Call 이라는 내부 Call이 수행되는데, 대량 건수를 조회하면 다량의 Fetch Call 이 발생하여 서능이 저하된다. 대량의 데이터일 경우에는 BLUCK COLLECT 기능을 이용하여 한꺼번에 많은 데이터를 가져오도록 하는 것이 좋다. DECLARE --bulk collect를 이용해 읽어들일 Nested Table 컬렉션 타입 생성 TYPE emp_rec_arr_type IS TABLE OF EMP%ROWTYPE; emp_rec_arr emp_rec_ar..
Oracle PL/SQL REF 커서 [ 바인드변수 사용] REF커서를 사용해야 할 경우 USING 절을 이용해야 한다 대부분의 경우 WHERE 조건의 변수 값만 달리한 거의 동일한 SQL 이 반복수행되는데, USING 절이 생략되면 SQL 공유가 되지 않아 매번 하드 파싱을 유발하면 성능 문제를 일으킬수 있다. CREATE OR REPLACE PROCEDURE OPEN_REFCUR_PROC ( P_ENAME IN VARCHAR2 , O_CURSOR OUT SYS_REFCURSOR) IS I_SQL_STATEMENT VARCHAR2(32676); BEGIN --변수명 앞에 콜론 을 추가하여 USING 구문 대상임을 선언해야함 I_SQL_STATEMENT := ' SELECT /*USING*/ ENAME,JOB FROM EMP WHERE ENAME := P_ENA..
Oracle PL/SQL REF 커서 C프로그램의 포인터와 유사하며 값 자체가 아닌 메모리 위치를 포인트하는 변수로, 정적 커서는 쿼리의 결과를 작업 영역에 담는 것에 비해 REF커서변수는 작업 영역에 대한 포인터를 가진다. REF 커서 타입 REF 커서는 오라클에서 미리 선언해둔 타입인 SYS_REFCURSOR와 사용자가 REF 커서 타입을 정의하여 사용하는 두 가지 종류가 있다. REF 커서 타입선언 시 반환타입을 설정할 수 있는데, 반환 타입이 없을 경우에는 어느 쿼리에서나 사용이 될 수 있지만 (Weak),RETURN 구문을 사용하여 반환 타입을 설정한 경우에는 반드시 같은 타입의 커서에서만 사용이 가능하다 --반환 타입이 없는 약한 타입설정(weak) TYPE EMPCURTYPE IS REF CURSOR; --반환 타입이 있는 강한..
Oracle PL/SQL 자율 트랜잭션 부모 트랜잭션 락(lock),리소스(resource), 커밋(commit)에 관련된 의존성을 가지지 않습니다. ( 부모 트랜잭션의 커밋/ 롤백 여부에 상관 없이 자신의 작업을 커밋 하거나 롤백할 수 있습니다.) 부모 트랜잭션과 자율 트랜잭션은 서로 독립적이므로 락 역시 공유하지 못합니다. 부모 트랜잭션에서 점유된 락(lock)을 자율 트랜잭션에서 소유하고자 한다면 데드락 현상이 발생하므로 주의 해야 합니다. 패키지 명세에서는 설정이 불가능하고 패키지 몸체 에서만 설정이 가능합니다. 자율 트랜잭션 생성 자율 트랜잭션으로 생성되어야 하는 프로시저나 함수의 경우 , 일반적인 프로시저나 함수를 정의하는 것과 거의 동일하며 선언부에 'PRAGAMA AUTONOMOUS_TRANSACTION' 구문만 추가하면 된다...
OraclePL/SQL [커서 관리] 커서는 SELECT 또는 DML 등의 SQL처리를 위한 데이터를 저장하고 있는 오라클이 관리하는 메모리에 대한 일종의 포인터다. 커서는 PGA라 불리는 오라클 메모리 공간에 할당되는데, SQ이 수행되면 PGA 영역에 소트 영역과 세션정보, 커서 상태, 스택 공간 등 SQL 을 수행하기 위해 필요한 공간을 할당받게 된다. 또한 이 영역은 실제 SQL을 수행할 수 있도록 한다. 커서를 실행하기 위한 이런 준비과정을 '커서를 오픈한다' 라고 표현한다. 명시적 커서와 묵시적 커서 커서는 사용 방법에 따라 명시적(Explicit) 방식과 묵시적(Implicit) 방식, 두가지 방식으로 나뉜다. CURSOR 키워드를 이용하여 커서를 명시적으로 선언하면 명시적 커서라 부르고 , 선언없이 SQL을 직접 사용하면 묵시적..
Oracle PL/SQL [제어 구문] PL/SQL 에서는 다른 프로그래밍 언어와 마찬가지로 여러 종류의 제어 구문을 활용하여 PL/SQL 블록 안에서 논리적인 흐름을 변경할 수 있다. 위와 그림과 같이 True 가 되어 THEN 구문을 실행하고 그렇지 않을 경우에는 FALSE 가 되어 ELSE 구문을 실행하는 구조이다. IF 문의 마지막은 END IF로 마무리하면 됩니다. 조건 비교가 추가로 필요하다면 IF 또는 ELSE 문 안에 IF 문을 추가로 사용할 수 있다 --조건이 하나일 경우 IF condition THEN sequence of statments1; END IF; --하나의 조건과 그 외의 조건의 경우 IF condition THEN sequence of statments11; ELSE sequence of statments3; ..
Oracle PL/SQL 프로시저[패키지] 패키지는 서로 관련 있는 프로시저, 함수, 타입들의 집합이다. 하나의 업무를 수행하기 위해 여러개의 프로시저, 함수, 타입이 필요할 경우 하나의 패키지로 묶어 생성한다면 관리하기도 쉽고 운영 안정성 측면에서도 유리하다. 패키지를 사용하려면 유지보수의 편이성이 높아지며, 프로그램 간 종속성 체인을 끊고 캡슐화를 지원하며 , 세션 지속형 변수를 지원하는 등 여러이점이 있으므로 프로그램의 품질 향상과 안정성을 위해 프로시저나 함수를 개별적으로 생성하여 사용하는 것보다 패키지를 사용하것이 좋다 패키지 생성 패키지 명세 (sercification)과 몸체(body) 두 부분으로 이루어져 있다. 명세는 패키지 내 어느 서브프로그램 에서도 사용될 수 있는 전역 변수를 선언하며, 프로그램을 어떻게 호출하고 커서를 어떻..
Oracle SQL(서브쿼리) 서브 쿼리란 한 SQL 문장 안에서 보조로 사용되는 또다른 SELECT 문을 의미한다. 최종 결과를 출력하는 쿼리를 메인 쿼리라고 한다면 , 이를 위한 중간 단계 혹은 보조 역할을 하는 SELECT 문을 서브쿼리라 한다. 조인 절에서 소개했던 SQL문 중 괄호 안에 들어있는 SELECT문을 서브 쿼리로 보면 되고 따라서 서브 쿼리는 여러개를 사용할수 있다. 서브쿼리는 다양한 형태로 사용된다 SELECT , FROM , WHERE 절 보두에서 사용가능하다. ISNERT,UPDATE,DELETE 문에서도 사용할수 있다. 연관성 없는 서브쿼리 메인 쿼리와의 연관성이 없는 쿼리를 말한다. 조인조건이 걸리지 않는 서브쿼리를 말한다 SELECT COUNT(*) FROM EMPLOYEES WHERE SALARY >=..