본문 바로가기

DB

(52)
Oracle 프로그래머스 SUM, MAX, MIN ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAMETYPENULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UPON_INTAKE VARCHAR(N) FALSE 최..
Oracle 프로그래머스 SELECT 문제 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UPON_INTAKE VARCHAR(N) FALSE..
Oracle PL/SQL 동적 SQL 오라클은 런타임 시에 동적으로 SQ을 만들어 수행될 수 있도록 동적(Dynamic)SQL 기능을 지원한다. 이를 이용해 PL/SQL에서 직접 기술할 수 없는 SELECT 문이나 DML 문들에 대해 도적으로 SQ을 정의하여 실행 시킬수 있다. 이를 이용하여 조건에 따라 유연하게 SQL 문을 변경하여 실행시킬수 있다. DBMS_SQL 패키지에서 기본적으로 제공하는 함수와 프로시저는 다음과 같다. 타입 이름 설명 함수 OPEN_CURSOR SQL문의 실행에 필요한 새로운 커서를 열고 커서 번호를 반환 함수 IS_OPEN 커서가 현재 열려 있으면 TRUE, 아니면 FALSE를 반환 프로시저 PARSE SQL 문장을 확인하고 커서와 결합 프로시저 BIND_VARIABLE SQL문장과 엽력 변수를 결합 프로시저 D..
Oracle PL/SQL 테이블 함수 Table 함수는 컬렉션의 열을 추출할 수 있는 함수이다. 이를 이용하여 테이블처럼 쿼리할 수도 있으며, 조인도 가능하다. Table 함수에서는 입력 값으로 스칼라 타입뿐 아니라, 컬렉션 타입(varry,neted table) REF커서 타입도 사용될수 있다. 쿼리 내 FROM 절에서 'TABLE'이라는 키워드로 접근 가능하며 반환 타입으로는 Nested Table 또는 Varray 컬렉션 타입이 사용된다. Table 함수 테이블의 결과 값을 패키지나 함수 등을 이용하여 가공을 거친 후에 다시 화면에 SQL 쿼리 처럼 결과를 출력하고 싶을 경우 Table 함수가 유용하게 사용될 수 있다. EMP 테이블의 결과를 컬렉션 변수를 이용해 가공한 후 해당 컬렉션의 결과를 테이블처럼 반환하는 Table 함수를 생..
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' 구문만 추가하면 된다...