2011년 6월 1일 수요일

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

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
    비교 연산자
    6AND
    논리곱
    7OR
    논리합


    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;
    /

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...