hyeonga_code
Database_81_PL/SQL_변수 선언, 스칼라 데이터, 조합 데이터, 참조 데이터, 부울 변수, 바인드 변수, %TYPE, %ROWTYPE 본문
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;
'Oracle Database' 카테고리의 다른 글
Database_83_PL/SQL_제어 구조_조건 제어문 (0) | 2023.08.31 |
---|---|
Database_82_PL/SQL_변수 사용, 실행문 작성 (0) | 2023.08.30 |
Database_80_PL/SQL_개요 (0) | 2023.08.30 |
Database_79_DATABASE_DB 구축 실습 (0) | 2023.08.29 |
Database_78_DATABASE DB_테이블 스페이스 (0) | 2023.08.28 |