Oracle :: %TYPE, %ROWTYPE

2023. 11. 6. 23:02· 📚 Study/Oracle
목차
  1. ■ %TYPE
  2. ■ %ROWTYPE

(파일명 20231102_03_hr(plsql))

■ %TYPE

- 특정 테이블에 포함되어 있는 컬럼의 데이터타입(자료형)을 참조하는 데이터타입

- 형식 및 구조

   변수명 테이블.컬럼명%TYPE [:= 초기값];

-- HR.EMPLOYEES 테이블의 특정 데이터를 변수에 저장
DECLARE
--V_NAME VARCHAR2(20);
V_NAME EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
SELECT FIRST_NAME INTO V_NAME -- 쿼리로 얻어낸 값을 변수에 담을 때에는 V := 쿼리 이런게 아니라 INTO 변수로!!
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 103;
DBMS_OUTPUT.PUT_LINE(V_NAME);
END;
--○ EMPLOYEES 테이블을 대상으로 108번 사원(Nancy)의
-- SALARY 를 변수에 담아 출력하는 PL/SQL 구문을 작성한다.
DECLARE
V_SAL EMPLOYEES.SALARY%TYPE;
BEGIN
SELECT SALARY INTO V_SAL
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 108;
DBMS_OUTPUT.PUT_LINE(V_SAL);
END;
--==>>
/*
12008
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
--○ EMPLOYEES 테이블의 특정 레코드 항목 여러 개를 변수에 저장
-- 103번 사원의 FIRST_NAME, PHONE_NUMBER, EMAIL 항목을 변수에 저장하여 출력
-- Alexander, 590.423.4567, AHUNOLD
DECLARE
V_FIRST_NAME EMPLOYEES.FIRST_NAME%TYPE;
V_PHONE_NUMBER EMPLOYEES.PHONE_NUMBER%TYPE;
V_EMAIL EMPLOYEES.EMAIL%TYPE;
BEGIN
SELECT FIRST_NAME, PHONE_NUMBER, EMAIL INTO V_FIRST_NAME, V_PHONE_NUMBER, V_EMAIL
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 103;
DBMS_OUTPUT.PUT_LINE(V_FIRST_NAME || ' ,' || V_PHONE_NUMBER || ', ' || V_EMAIL);
END;
--==>> Alexander ,590.423.4567, AHUNOLD

 

 

■ %ROWTYPE

- 테이블의 레코드와 같은 구조의 구조체 변수를 선언 (여러 개의 컬럼)

- 형식 및 구조

   변수명 테이블명%ROWTYPE;

DECLARE
--V_FIRST_NAME EMPLOYEES.FIRST_NAME%TYPE;
--V_PHONE_NUMBER EMPLOYEES.PHONE_NUMVER%TYPE;
--V_EMAIL EMPLOYEES.EMAIL%TYPE;
V_EMP EMPLOYEES%ROWTYPE;
BEGIN
SELECT FIRST_NAME, PHONE_NUMBER, EMAIL
INTO V_EMP.FIRST_NAME, V_EMP.PHONE_NUMBER, V_EMP.EMAIL
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 103;
--DBMS_OUTPUT.PUT_LINE(V_FIRST_NAME || ' ,' || V_PHONE_NUMBER || ', ' || V_EMAIL);
DBMS_OUTPUT.PUT_LINE(V_EMP.FIRST_NAME || ' ,' || V_EMP.PHONE_NUMBER || ', ' || V_EMP.EMAIL);
END;
--==>>
/*
Alexander ,590.423.4567, AHUNOLD
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
--○ EMPLOYEES 테이블의 전체 레코드 항목 여러 개를 변수에 저장
-- 모든 사원의 FIRST_NAME, PHONE_NUMBER, EMAIL 항목을 변수에 저장하여 출력
DECLARE
V_EMP EMPLOYEES%ROWTYPE;
BEGIN
SELECT FIRST_NAME, PHONE_NUMBER, EMAIL
INTO V_EMP.FIRST_NAME, V_EMP.PHONE_NUMBER, V_EMP.EMAIL
FROM EMPLOYEES;
DBMS_OUTPUT.PUT_LINE(V_EMP.FIRST_NAME || ' ,' || V_EMP.PHONE_NUMBER || ', ' || V_EMP.EMAIL);
END;
--==>> 에러 발생
-- (ORA-01422: exact fetch returns more than requested number of rows)
--> 여러 개의 행(ROWS) 정보를 얻어와 담으려고 하면
-- 단일 변수에 저장하는 것 자체가 불가능해진다.
저작자표시 (새창열림)
  1. ■ %TYPE
  2. ■ %ROWTYPE
'📚 Study/Oracle' 카테고리의 다른 글
  • Oracle :: PROCEDURE(프로시저)
  • Oracle :: FUNCTION (함수)
  • Oracle :: 반복문 (LOOP문, WHILE문, FOR문)
  • Oracle :: 조건문 (IF문, CASE문)
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
Oracle :: %TYPE, %ROWTYPE
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.