2020년 7월 18일 토요일

(오라클, ORACLE PLSQL)PL/SQL 장점, PL/SQL 작성방법, PL/SQL 블록 구조

(오라클, ORACLE PLSQL)PL/SQL 장점, PL/SQL 작성방법, PL/SQL 블록 구조

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=560

1-2. PL/SQL 장점

n BEGIN~END와 같은 블록 구조를 가지므로 블록안의 여러 SQL 구문이 한번에 서버로 전송되므로 수행속도가 향상되고 통신량도 줄일 수 있다.

n 블록안에 또 다른 블록을 포함하는 형태로 코드를 모듈화 할 수 있다.

n 단일형 데이터 타입(SCALAR DATA TYPE), 복합데이터 타입(COMPOSITE DATA TYPE), 상수 등 여러 형태의 변수 선언이 가능하다.

n 테이블의 칼럼을 참조하는 동적 변수를 정의 할 수 있다.(%TYPE, %ROWTYPE)

n IF문과 같은 조건문을 사용할 수 있다.

n LOOP~END LOOP, FOR..LOOP~END LOOP, WHILE .. LOOP~END LOOP와 같은 반복문을 사용할 수 있다.

n Exception절을 이용하여 프로그래밍 언어처럼 예외(오류)를 처리 할 수 있으며 사용자 정의 예외의 사용도 가능하다.

1-3. PL/SQL 작성방법

n 명령문의 종료는 세미콜론(;) 이다.

n CREATE 구문을 사용했다면 실행을 위해 마지막에 슬래시(‘/’)가 필요하다.

n 익명의 블록을 만들기 위해서는 DECLARE 구문으로, 이름있는 블록을 만들기 위해서는 CREATE 구문을 사용해야 한다.

n 하나의 BEGIN에 대응되는 END 구문은 하나이며 세미콜론(;)으로 끝나야 하고, END 다음에 CREATE 구문에서 사용된 함수나 프로시저의 이름을 써줘도 된다.

n Declare로 선언된 익명블럭인 경우 컴파일시 에러가 발생하면 에러 코드/메시지를 하단에 보여주지만 CREATE로 시작하는 함수나 프러시저는 오류 발생시 SHOW ERRORS(ERROR)로 확인해야 한다.

SQL> SHOW ERRORS

LINE/COL ERROR

------------- ----------------------------------------------------------------

10/13 PL/SQL: SQL Statement ignored

11/10 PLS-00201: ‘EMP.SAL' …..

1-4. PL/SQL 블록 구조

DECLARE

Variable declaration

BEGIN

Program Execution

……

EXCEPTION

Exception handling

……

END;

[PL/SQL 블록 구조]

n Declare절 : 선언부로써 필수는 아님, 변수 or 커서 등을 선언한다. 이름을 정의하고 재 사용할 PL/SQL 블록을 만들기 위해서는 CREATE구문을 사용해야 한다.

- 변수선언예

goodsNo NUMBER(4);

isLogin BOOLEAN;

ename VARCHAR2(20);

- 커서 선언 예

Declare

Cursor cEmp is select empno, ename from emp where deptno = 10;

Begin

……

End;

/

n Begin ~ End절 : 필수 요소이며 절차적 언어의 특징 및 SQL을 사용하여 비즈니스 로직을 구현한다.

n Exception절 : 예외처리절(프로그래밍 언어의 CATCH구문) 이다.

[PL/SQL 예문]

SQL> DROP TABLE emp_temp;

SQL> CREATE TABLE emp_temp AS SELECT empno, sal, ename FROM emp WHERE 1 = 2;

SQL> EDIT SAMPLE.SQL

-- 사번이 7876인 사원부터 시작해서 관리자(MGR)를 계속 확인하면서

-- 계층구조 위쪽으로 탐색하다가 급여가 3000보다큰 경우 반복문을 빠져 나와

-- EMP_TEMP 테이블에 INSERT하는 예제

--이름없는 익명 블록을 만든다.

DECLARE

-- 선언부 : BEGIN절에서 사용할 변수를 선언한다.

V_EMPNO EMP.EMPNO%TYPE;

V_SAL EMP.SAL%TYPE := 0;

V_MGR_NUM EMP.MGR%TYPE;

V_ENAME EMP.ENAME%TYPE;

V_STARTING_EMPNO EMP.EMPNO%TYPE := 7876;

-- 실행부(BEGIN~END)

BEGIN

SELECT MGR INTO V_MGR_NUM

FROM EMP

WHERE EMPNO = V_STARTING_EMPNO;

-- 7876부터 상위로 관리자(MGR)을 따라 위로 검색하면서 급여가 3000보다 크다면 루프를 빠져나간다.

WHILE V_SAL <= 3000 LOOP

SELECT EMPNO, SAL, ENAME, MGR

INTO V_EMPNO, V_SAL, V_ENAME, V_MGR_NUM

FROM EMP

WHERE EMPNO = V_MGR_NUM;

END LOOP;

INSERT INTO EMP_TEMP VALUES(V_EMPNO, V_SAL, V_ENAME);

COMMIT;

-- 예외처리부

EXCEPTION

-- 오라클 서버에 사전에 정의된 예외들

WHEN NO_DATA_FOUND THEN

INSERT INTO EMP_TEMP VALUES (NULL,NULL,'NOT FOUND');

COMMIT;

WHEN TOO_MANY_ROWS THEN

INSERT INTO EMP_TEMP VALUES (NULL,NULL,'TOO MANY ROWS');

COMMIT;

END;

/

SQL>@SAMPLE

SQL>SELECT * FROM EMP_TEMP;

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...