PL/SQL 에서 데이터를 변수에 담으려고 할때 가장 쉽고 빠른 방법이다
DECLARE문에서도 변수에 값을 담을수 있지만 SELECT INTO는 어떻게 하는지 한번 보자
DECLARE
변수명1 데이터타입
BEGIN
SELECT 컬럼명
INTO 변수명1
FROM 테이블명
WHERE 조건
END;
먼저 담으려고하는 변수명과 그변수명의 데이터 타입을 선언해줘야 하는데
이때 데이터타입은 담으려고하는 데이터타입과 일치해야한다
예를들어 DNAME이라는 컬럼의 데이터를 넣으려고 한다면 처음 선언할때도
데이터타입을 맞춰주어야 한다
변수명1 DEPT.DNAME%TYPE 이런식으로 말이다
예제랑 같이 보는게 이해하기 쉽다
SET SERVEROUTPUT ON;
DECLARE
A DEPT.LOC%TYPE; -- A라는 변수명에다 넣고싶은 데이터의 타입을 선언해주었다
BEGIN
SELECT LOC -- 넣고싶은 데이터
INTO A -- 선언한 변수명
FROM DEPT
WHERE LOC = 'NEW YORK'; -- 이조건으로 인해서 A에는 NEW YORK이라는 값 하나만 들어가게 된다
DBMS_OUTPUT.PUT_LINE(A); -- 잘 담아졌나 출력해보자
END;
/
-- 컬럼의 특정데이터 하나를 변수에 담는 과정이 되었다
DECLARE
A DEPT%ROWTYPE; -- ROWTYPE은 DEPT테이블의 모든 컬럼의 타입을 지정해줄 수 있다
BEGIN
SELECT * -- 모든 컬럼의 타입이기때문에 모든컬럼을 선택했다
INTO A
FROM DEPT
WHERE DEPTNO = 10; -- 모든컬럼이지만 한개의 행만 A에 넣을수 있으므로
-- WHERE문에서 조건을 붙여서 한개의 행을 지정했다
DBMS_OUTPUT.PUT_LINE(A.DEPTNO || ' : ' || A.DNAME || ' : ' || A.LOC);
--A에는 모든 컬럼의 단일행의 데이터가 들어가 있으므로
--리턴받을려고 할때 A.DEPTNO 형식으로 불러와야한다 그냥 A로는 불러올수없다
END;
SET SERVEROUTPUT ON;
DECLARE
A DEPT.LOC%TYPE; -- 여러변수선언
B DEPT.DEPTNO%TYPE;
C DEPT.DNAME%TYPE;
BEGIN
SELECT LOC,DEPTNO,DNAME -- 여러 변수에 맞는 각각의 데이터타입을 순서대로 작성해야한다
INTO A,B,C -- 데이터 타입끼리 일치하게끔 순서배치를 잘해야한다
FROM DEPT
WHERE LOC = 'NEW YORK'; -- 하나의 행만 선택하게 조건을 붙인다
DBMS_OUTPUT.PUT_LINE(A || ' : '|| B || ' : '|| C); -- 잘담았는지 확인하기
END;
/