PLㅣ/SQL
- PROCEDURAL LANGUAGE SQL
- 표준 SQL에 분기문, 변수, 제어문 등이 없어 기능이 제한적
이를 해결하기 위한 방법으로 제공된 것이 PL/SQL
- 미리 컴파일되어 서버에 저장되어 실행속도 향상과 네트워크 트래픽 감소
- 캡슐화, 모듈화 가능
- 익명블록(Anonymous Block), 프로시져(Stored Procedure), 함수(User Defined Function)
트리거(Trigger), 패키지(Package) 등이 제공됨
1. 익명등록
- 이름이 없는 블록
- 저장되지 않음
- pl/sql의 기본 구조 제공
(사용형식)
DECLARE
선언영역 => 변수,상수 커서,사용자데이터타입
BEGIN
실행영역 => 비지니스 로직을 처리하기 위한 SQL문
[EXCEPTION
예외처리문
]
END;
사용예)구구단의 7단을 출력하는 익명 블록을 작성하시오
DECLARE
L_BASE NUMBER:=7;
L_RESULT NUMBER:=0;
BEGIN
FOR I IN 1..9 LOOP
L_RESULT:=L_BASE*I;
DBMS_OUTPUT.PUT_LINE(L_BASE||' * '||I||' = '||L_RESULT);
END LOOP;
END;
1)변수
. 고급 프로그램 언어의 변수와 같은 기능 제공
. SCLAR 타입 : 보통의 변수 타입, 하나의 자료만 보관
. 참조형(REFERENCE) : 행참조,열참조
. BIND형, COMPOSITE 변수가 제공
(변수[상수] 선언형식)
변수[상수]명 [CONSTANT] 데이터타입 [:=초기값];
. 상수 선언은 'CONSTANT'을 사용하고 이때 반드시 초기값을 기술해야 함
. 데이터 타입은 SQL에서 사용하는 표준 데이터 타입과 PLS_INTEGER, BINARY_INTEGER, BOOLEAN
등이 사용됨 --BOOLEAN 값 3가지 (TRUE,FALSE,NULL)
. 할당연산자는 ':='임 -- '='은 동등연산자
. 변수에 초기값이 할당되지 않으면 모든 변수에는 NULL값으로 초기화 됨
. '데이터 타입' 대신 참조형이 사용될 수 있음
.참조형 변수
- 행참조와 열참조가 제공
- 열참조 : 테이블명.컬럼명%TYPE
ex) L_NAME MEMBER.MEM_NAME%TYPE
- 행참조 : 테이블명%ROWTYPE
ex) L_MEMROW MEMBER%ROWTYPE;
회원명컬럼은 L_MEMROW.MEM_NAME으로 참조
사용예)10-110 사이의 임의의 수를 발생시켜 해당부서에 입사일이 가장 빠른 사원의 사원번호,
사원명,부서번호,입사일,급여를 출력하는 익명 블록을 작성하시오
DECLARE
L_EID EMP.EMPLOYEE_ID%TYPE;
L_ENAME EMP.EMP_NAME%TYPE;
L_DID HR.DEPARTMENTS.DEPARTMENT_ID%TYPE;
L_DATE DATE;
L_SAL NUMBER:=0;
BEGIN
L_DID:=TRUNC(DBMS_RANDOM.VALUE(10,119),-1);
SELECT A. EMPLOYEE_ID,A.EMP_NAME,A.HIRE_DATE,A.SALARY
INTO L_EID,L_ENAME,L_DATE,L_SAL
FROM (SELECT EMPLOYEE_ID,EMP_NAME,HIRE_DATE,SALARY
FROM EMP
WHERE DEPARTMENT_ID=L_DID
ORDER BY 3)A --서브쿼리에는 INTO절을 사용하지 않음
WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('사원번호 : '||L_EID); --자바 SYSTEM.OUT.PRINTLN 이랑 같음
DBMS_OUTPUT.PUT_LINE('사원명 : '||L_ENAME);
DBMS_OUTPUT.PUT_LINE('부서번호 : '||L_DID);
DBMS_OUTPUT.PUT_LINE('입사일 : '||L_DATE);
DBMS_OUTPUT.PUT_LINE('급여 : '||L_SAL);
DBMS_OUTPUT.PUT_LINE('-------------------------------');
END;
'ORACLE 복습 & 정리' 카테고리의 다른 글
[ORACLE] 분기명령 221201-02 (0) | 2022.12.01 |
---|---|
[ORACLE] 커서(CURSOR) 2221201-01 (0) | 2022.12.01 |
[ORACLE] INDEX 221130-03 (0) | 2022.11.30 |
[ORACLE] SEQUENCE,동의어 221130-02 (0) | 2022.11.30 |
[ORACLE] 계층형 쿼리 221129-03 (0) | 2022.11.30 |