Akashic Records

Chapter 6 PL SQL(Procedural Language/SQL) - 3 본문

오래된글/DataBase

Chapter 6 PL SQL(Procedural Language/SQL) - 3

Andrew's Akashic Records 2018. 4. 15. 22:35
728x90

PLT 6.3 PL/SQL 블록

PL/SQL은 프로그램을 논리적인 블록으로 나누게 하는 구조화된 블록 언어이다. PL/SQL 블록에서 사용하는 변수는 블록에 대해 논리적으로 선언할 수 있고 사용할 수 있다. 변수들과 그 외의 식별자를 참조하고 선언함으로써 PL/SQL 블록 내에서 값을 저장하고 변경할 수 있는 논리적인 단위이다.

PL/SQL 블록 구문과 지침

PL/SQL은 SQL의 확장이기 때문에 SQL에 적용하는 일반적인 구문은 PL/SQL 언어에 대해서도 적용 가능하다. 문장은 몇 라인 이상 계속될 수 있습니다. 문법적인 요소는 공백으로 분리될 수 있습니다.

식별자

식별자는 상수, 변수, 예외 ,커서 ,커서 변수, SUBPROGRAM, 패키지를 포함하는PL/SQL프로그램 항목과 요소를 명명하기 위해 사용됩니다. 식별자는 30문자까지 포함할 수 있지만 알파벳 문자로 시작해야 합니다. 블록에서 사용된 테이블의 열 이름과 동일한 이름으로 식별자를 사용할 수 없습니다. PL/SQL식별자가 동일 SQL명령에 있고 열로 동일 이름을 가지고 있다면, 이때 ORACLE은 참조 중인 열로 간주합니다. 예약어는 더블 인용 부호에  둘러싸여 있지 않으면 식별자로서 사용될 수 없습니다. 예약어는 읽기 쉽도록 대문자로 사용합니다.

구분 문자

구분 문자는 PL/SQL에 대한 특수한 의미를 가지는 단순 상징이거나 혼합 상징 입니다.

단순 상징


혼합 상징


기호

의미

기호

의미

+

덧셈 연산자

<>

관계형 연산자

-

뺄셈 연산자

!=

관계형 연산자

*

곱셈 연산자

||

접속 연산자

/

나눗셈 연산자

--

단일 라인 주석 지시자

=

관계형 연산자

/*

주석 구분 문자 시작

@

원격 액세스 지시자

*/

주석 구분 문자 종료

;

문장 종결자

:=

지정 연산자(치환 연산자)


Literal

Literal은 식별자(identifier)로 표현되지 않은 숫자, 문자, 문자열, BOOLEAN 값입니다. 문자Literal은 PL/SQL문자 집합 내에서 인쇄 가능한 모든 문자를 포함합니다. 숫자 Literal은 단순 값(예:-32.5) 또는 과학적인 표기법

주석 코드

주석 코드 각 단계를 문서화하고 디버깅을 돕기 위해 코드에 주석을 기술합니다. 주석이 단일 라인에 있으면 두 개의 대쉬(--)을 기술하면 – 뒤에 기술된 것은 주석으로 인식 하고, 주석 범위가 여러 줄이라면 기호 /*와 */사이에 주석을 기술 한다. 주석은 철저하게 정보를 제공해야 하고 기능적인 논리 또는 데이터에 대한 어떤 조건 또는 기능을 강요해서는 안됩니다. 좋은 주석은 읽기 쉽게 하고 코드 유지를 위해 매우 중요합니다.

PL/SQL에서 SQL함수

SQL에서 이용 가능한 대부분의 함수는 PL/SQL표현식에서도 유효합니다.

  • 단일 행 숫자 함수

  • 단일 행 문자 함수

  • 데이터형 변환 함수

  • 데이트 함수 그 밖의 함수

아래 함수는 절차적인 문장에서는 사용 불가능합니다.

  • GREATEST, LEAST, DECODE.

  • 그룹 함수(AVG, MIN, MAX, COUNT, SUM, STDDEVE, VARIANCE)는 테이블에서 행 그룹에 적용되므로 PL/SQL블록에 있는 SQL문장에서만 이용 가능합니다.

V_total := SUM(number_table);  -- Error가 발생한다.


데이터형 변환

PL/SQL은 데이터형이 문장에서 혼합되었다면 동적으로 데이터형 변환을 시도 합니다. 예를 들면NUMBER값을 CHAR 변수가 지정되었다면 그것이 CHAR변수에 저장될 수 있도록 하기 위해PL/SQL은 동적으로 숫자를 문자로 변환 합니다. 문자 표현을 숫자 값으로 나타내는 역의 상황도 적용됩니다. DATE변수에 대해 문자 값을 지정할 수 있고 역의 상황도 적용됩니다. 혼합된 데이터형이 표현식에서 생성되면 데이터를 전환하기 위해 해당 변환 함수를 사용하여야 합니다.


PL/SQL은 가능한 한 데이터형 변환을 시도하지만 성공은 수행 중인 작업에 달려있다. 명시적으로 데이터의 형 변환을 시도하는 것은 상당히 성능에 영향을 미치고 소프트웨어 버전이 변경되더라도 유효하게 유지될 수 있기 때문에 좋은 프로그램이 될 수 있다.

데이터형 변환 함수의 종류

  • TO_CHAR(value, format)

  • TO_DATE(value, format)

  • TO_NUMBER(value, format)

중첩 블록과 변수 범위

  • 문장은 실행 명령이 허용하는 곳 어디에서든지 중첩될 수 있습니다.

  • 중첩 블록은 하나의 문장이 됩니다.

  • 예외 섹션에서도 중첩 블록을 사용할 수 있습니다.

  • 객체 범위는 객체를 참조할 수 있는 프로그램 영역 입니다.

  • 선언된 변수를 실행 섹션에서 참조할 수 있습니다.

  • 한정시키지 않은 변수는 참조할 수 있는 영역에서 변수를 참조 가능합니다.

- 블록은 둘러싸는 블록을 참조할 수 있습니다.

- 블록은 둘러싸인 블록을 참조할 수 없습니다.

DECLARE

            x NUMBER;

            y NUMBER;

BEGIN

            x := 1;

            y := 2;

            -- 이곳에서 x, y의 값은 x := 1, y := 2

            DECLARE

                          y NUMBER;

                          z NUMBER;

            BEGIN

                          -- 이곳에서 x, y, z의 값은 x := 1, y := NULL, z := NULL

                          x := 3;

                          y := 4;

                          z := 5;

                         -- 이곳에서 x, y, z의 값은 x := 3, y := 4, z := 5

            END;

            -- 이곳에서 x, y, z의 값은 x := 3, y := 2, z는 참조 불가능하다.

END;

/


PL/SQL에서 연산자

연산자는 논리, 산술, 연결, 연산 제어 명령인 괄호, 지수 연산자가 있다.

우선순위

연  산 자

설     명

1

**, NOT

지수 승, 논리 부정 연산자

2

+, -

식별, 부정 연산자

3

*, /

곱셈,나눗셈 연산자

4

+, - , ||

덧셈,뺄셈,연결 연산자

5

=,!=,<,>,<=,>=,IS NULL,LIKE,BETWEEN,IN

비교 연산자

6

AND

논리곱

7

OR

논리합


DECALRE

            v_cnt           NUMBER := 0;

            v_eq           BOOLEAN;

            v_valid           BOOLEAN;

BEGIN

            V_cnt := v_cnt + 1;

            v_eq := (v_n1 = v_n2);

            v_valid := (v_empno IS NOT NULL);

END;

/


NULL로 작업할 때 아래 규칙을 명심함으로써 몇 가지 일반적인 실수를 피할 수 있습니다.

  • 관계 연산자로 NULL을 비교하면 항상 NULL이 됩니다.

  • NULL에 논리 연산자 NOT을 적용하면 항상 NULL이 됩니다.

  • 조건 제어 문장에서 조건이 NULL이 되면 관련된 문장은 실행되지 않습니다.

프로그래밍 지침 사항

PL/SQL 블록을 개발할 때 명확한 코드 생성과 유지를 경감하기 위하여 프로그래밍 지침을 수행 합니다.

코드 규약

범    주

대소문자 규약

사용 예

SQL명령어

대문자

SELECT, INSERT, UPDATE

PL/SQL 키워드

대문자

DECLARE, BEGIN, END

데이터형

대문자

NUMBER,VARCHAR2,CHAR

식별자와 매개변수

소문자

v_sal,v_ename,v_job

데이터베이스 테이블과 열명

소문자

emp, dept, salgrade


코드명 지정 규약

식별자

명명 규약

사용 예

변수

v_name

v_sal

상수

c_name

c_company_name

커서

name_cursur

emp_cursor

예외

e_name

e_too_many

테이블 형

name_table_type

amount_table_type

테이블

name_table

order_total_table

레코드 형

name_record_type

emp_record_type

레코드

name_record

customer_record

SQL*Plus 치환 매개변수

p_name

p_sal

SQL*Plus 전역변수

g_name

g_year_sal


코드 들여쓰기

명확성을 위해 또는 읽기 쉽도록 하기 위해 코드를 각 단계별로 들여 씁니다. 구조를 보여주기 위해 Carriage return을 사용합니다.

DECLARE

            v_deptno emp.deptno%TYPE;

BEGIN

            SELECT deptno

                          INTO v_deptno

                          FROM emp

                          WHERE empno = 7788;

            IF v_deptno IN (10,20) THEN

                          UPDATE emp

                                       SET sal = 3500

                                       WHERE empno = 7788;

            ELSE

                          UPDATE emp

                                       SET sal = 2500

                                       WHERE empno = 7788;

            END IF;

END;

/


728x90
Comments