hyeonga_code

Database_81_PL/SQL_변수 선언, 스칼라 데이터, 조합 데이터, 참조 데이터, 부울 변수, 바인드 변수, %TYPE, %ROWTYPE 본문

Oracle Database

Database_81_PL/SQL_변수 선언, 스칼라 데이터, 조합 데이터, 참조 데이터, 부울 변수, 바인드 변수, %TYPE, %ROWTYPE

hyeonga 2023. 8. 30. 06:59
반응형

   

                    --------------------------------------------------------------------
                            -- PL/SQL Block Structure
                                -- DECLARE
                                    -- 선언
                                        -- 변수
                                        -- 상수
                                        -- 커서
                                        -- 사용자 정의 예외 사항
                                -- BEGIN
                                    -- SQL
                                    -- PL/SQL
                                -- Exception Handling Section_예외 처리
                                    -- 오류 발생 시 수행할 작업
                                -- END;
                        --------------------------------------------------------------------
-- PL/SQL 변수 선언
    -- 변수 
        -- 용도
            -- 데이터의 임시 저장 영역
            -- 저장된 값 조작
            -- 재사용성
            -- 손쉬운 유지 관리
        -- 이름 지침
            -- 문자로 시작해야 합니다.
            -- 문자나 숫자를 포함할 수 있습니다.
            -- 특수 문자를 사용할  수 있습니다. : $, _, #
            --  30자 이하로 작성해야 합니다.
            -- 예약어를 포함할 수 없습니다.
            -- 열 이름을 식별자로 사용할 수 없습니다.
                -- 변수 이름_식별자는 블록에서 사용되는 테이블 컬럼 이름과 동일하게 작성할 수 없습니다.
        -- 변수 처리
            -- 선언 섹션에서 선언, 초기화합니다.
                -- 값이 저장될 저장 공간을 할당, 데이터 유형을 지정, 저장 위치에 이름을 붙여 참조합니다.
                -- 변수에 초기값을 할당하고 NOT NULL 제약 조건을 부여할 수 있습니다.
            -- 실행 섹션에서 사용되며 새 값이 할당됩니다.
            -- PL/SQL 서브 프로그램에 파라미터로 전달됩니다.
            -- PL/SQL 서브 프로그램의 출력 결과를 보유하는 데에 사용됩니다.
        -- 변수 선언, 초기화
            /*
            idenrifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr ];
                -- idenrifier : 변수 이름입니다.
                -- CONSTANT : 변수의 값을 변경할 수 없도록 제한합니다.
                -- NOT NULL : 변수에 값이 반드시 포함되도록 제한합니다.
                -- expr : PL/SQL 표현식입니다.
                    -- 리터럴 표현식
                    -- 다른 변수
                    -- 연산자 및 함수를 포함하는 표현식
            */
            -- 선언부에서 PL/SQL의 식별자를 모두 선언해야 합니다.
            -- 변수의 초기값은 선택적으로 할당할 수 있습니다.
                -- 상수는 반드시 초기화해야 합니다.
                -- NOT NULL 변수는 반드시 초기화해야 합니다.
            -- 주의 사항
                -- 변수의 의미를 알 수 있는 식별자를 사용합니다.
                -- 일관성 있는 이름 지정 규칙을 따라 작성합니다.
                -- NOT NULL 및 CONSTANT로 지정된 변수를 초기화합니다.
                -- 가독성과 코드 유지 관리 효율을 높이기 위해 한 행에 하나의 식별자를 선언합니다.
                -- 변수 초기화 방법
                    -- :=value : 할당 연산자
                    -- DEFAULT value


SET serveroutput ON
DECLARE
    v_myName VARCHAR(20);
BEGIN
    v_myName := 'John';
    DBMS_OUTPUT.PUT_LINE('My name is ' || v_myName);
END;


SET serveroutput ON
DECLARE
    v_myName VARCHAR2(20):='John';
BEGIN
    v_myName:='Steven';
    DBMS_OUTPUT.PUT_LINE('My name is ' || v_myName);
END;



        -- 변수 유형
            -- 스칼라 데이터 유형
                -- 단일 값을 보유합니다.
                -- 기본 데이터 유형은 Oracle Server 테이블의 열 유형에 대응됩니다.
                -- 유형
                    -- 숫자
                    -- 문자
                    -- 날짜
                    -- 부울
            -- 조합 데이터 유형
                -- 레코드와 같은 유형입니다.
                -- 필드 그룹을 PL/SQL 블록에서 정의하고 조작할 수 있도록 합니다.
            -- 참조 데이터 유형
                -- 다른 프로그램 항목을 지정하는 값_포인터를 보유합니다.
            -- LOB 데이터 유형
                -- 용량이 큰 대형 객체의 위치를 지정하는 값_위치자를 보유합니다.
            -- 비 PL/SQL 유형
                -- 선행 컴파일러 프로그램에 선언된 호스트 언어 변수가 있습니다.
        -- %TYPE 속성
            -- 선언
                /*
                idenrifier table.colum_name%TYPE;
                */
            -- 기준
                -- 데이터베이스 열의 정의
                -- 선언된 다른 변수
            -- 앞에 나오는 항목
                -- 데이터베이스 테이블, 열 이름
                -- 선언된 변수의 이름
        -- 부울 변수
            -- TRUE, FALSE, NULL 값만 할당할 수 있습니다.
            -- 조건식
                -- 논리 연산자 AND, OR
                -- 단항 연산자 NOT
            -- 산술, 문자, 날짜 표현시긍ㄴ 부울 값을 반환하는 데에 사용할 수 있습니다.

    -- PL/SQL 레코드
        /*
        TYPE type_name IS RECORD(
            field_deflaration [, field_declararion] );
            
        identifier type_name;
        
        field_name { field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE }
            [ [ NOT NULL ] { := | DEFAULT } expr ]
        */
        -- 필드에 저장된 관련 데이터 항목의 그룹입니다.
        -- 레코드마다 고유한 이름과 데이터 유형을 가집니다.
        -- 데이터는 유형이 서로 다르지만 논리적으로 연관된 필드가 들어 있는 레코드 데이터를 하나의 논리적 단위로 처리할 수 있습니다.
        -- 이러한 필드에 레코드 유형을 선언하면 해당 필드를 하나의 단위로 처리할 수 있습니다.
        -- 테이블에서 데이터 행을 패치_FETCH 히여 처리하는 데에 편리합니다.

SET serveroutput ON
DECLARE
    TYPE t_rec IS RECORD ( -- 레코드 타입을 선언합니다.
        v_sal NUMBER(8),
        v_minsal NUMBER(8) DEFAULT 1000,
        v_hire_date employees.hire_date%TYPE,
        v_rec1 employees%ROWTYPE
        );
    v_myrec t_rec;  -- 사용할 실제 변수입니다.
BEGIN
    v_myrec.v_sal := v_myrec.v_minsal + 500;
    v_myrec.v_hire_date := sysdate;
    SELECT * INTO v_myrec.v_rec1
    FROM employees WHERE employee_id = 100;
    DBMS_OUTPUT.PUT_LINE(v_myrec.v_rec1.last_name ||' '||
    TO_CHAR(v_myrec.v_hire_date) || ' ' || TO_CHAR(v_myrec.v_sal));
END;



        -- %ROWTYPE 속성
            -- 데이터베이스 테이블, 뷰의 열 모음에 따라 변수를 선언합니다.
            -- %ROWTYPE 앞에는 데이터베이스 테이블, 뷰 이름이 접두어로 함께 작성합니다.
            -- 레코드의 필드는 테이블 또는 뷰의 열에서 이름, 데이터 유형을 가져옵니다.
            -- 장점
                -- 기본 데이터베이스 열의 개수와 데이터 유형을 알 필요가 없습니다.
                -- 실제로 런타임에 영향을 미칠 수 있습니다.
            /*
            DECLARE identifier reference%ROWTYPE;
                -- identifier : 레코드 전체를 식별학 위한 이름입니다.
                -- reference : 레코드가 기반을 두고 있는 테이블, 뷰, 커서, 커서 변수의 이름입니다.
            */


    -- 바인드 변수=호스트 변수
        -- 호스트 환경에서 생성됩니다.
        -- OS에서 사용하는 변수입니다.
        -- VARIABLE 키워드를 사용하여 생성합니다.
        -- SQL 문과 PL/SQL 블록에서 사용합니다.
        -- PL/SQL 블록이 실행된 후에도 엑세스할 수 있습니다.
        -- 이름 앞에 콜론을 사용하여 참조합니다.
        -- PRINT 명령을 사용하여 값을 출력합니다.
        -- 블록 밖에서 선언하는 변수입니다.
        -- DECLARE 구문을 작성하지 않았습니다.
        
VARIABLE b_emp_salary NUMBER
    BEGIN
        SELECT salary INTO :b_emp_salary 
        FROM employees 
        WHERE employee_id = 178;
    END;
    /
PRINT b_emp_salary



    -- 블록 밖에서도 바인드 변수를 호출할 수 있습니다.
SELECT first_name, last_name
FROM employees 
WHERE salary=:b_emp_salary;

반응형