SMALL
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
PL/SQL 자료형과 변수
자료형 종류
: SQL 자료형을 모두 포함 + 확장된 형태의 자료형도 제공
1) 기본 자료형
- 문자형 : char, varchar2, long, clob, ...
- 숫자형 : number, binary_integer, pls_integer
- 날짜형 : date, timestamp
- 논리형 : boolean (true, false, null)
2) 복합 자료형
- record
- cursor
- collection : varry(배열), nested table(자바List), associative array(자바Map)
SQL과 PL/SQL의 자료형 크기가 상이한 것을 확인할 수 있습니다.
변수 종류
1) 스칼라 변수 : 단일 값 처리, 자료형 직접 지정
2) 참조 변수 : 다른 테이블의 컬럼 타입 참조
3) 상수
스칼라 변수
declare
user_name varchar2(20) := '홍길동'; -- 변수 선언과 동시에 대입(:=)
n number;
today date := sysdate;
bool boolean;
age constant number := 20; -- 값 변경 불가한 상수
begin
dbms_output.put_line('user_name : ' || user_name);
dbms_output.put_line('n : ' || n); -- '' (null)
dbms_output.put_line('today : ' || today);
-- dbms_output.put_line(bool);
-- PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
dbms_output.put_line('age : ' || age);
end;
/
boolean타입은 dbms_output.put_line을 이용하여 값을 출력할 수 없습니다.
또한, 변수 n의 경우 현재 아무런 값이 대입 되지 않았으므로 '' null이 출력 되었습니다.
declare
user_name varchar2(20) := '홍길동'; -- 변수 선언과 동시에 대입(:=)
n number;
today date := sysdate;
bool boolean;
age constant number := 20; -- 값 변경 불가한 상수
begin
-- 상수 변경 불가!!!
-- age := 30;
-- PLS-00363: expression 'AGE' cannot be used as an assignment target
n := 10 + 20;
dbms_output.put_line('n : ' || n); -- '' (null)
bool := age > 10;
if bool then
dbms_output.put_line('참참'); -- true일 때 실행 구문
else
dbms_output.put_line('거짓거짓'); -- false일 때 실행 구문
end if;
end;
/
상수인 age를 변경하려고 하니
"PLS-00363: expression 'AGE' cannot be used as an assignment target" 해당 오류 메세지가 뜨면서 변경이 불가하였습니다.
참조 변수
☞ %type
- 기존 테이블을 컬럼 단위로 참조
declare
-- 타입을 직접 지정하지 않고, emp_name의 타입을 가져와 씀
v_emp_name employee.emp_name%type;
v_phone employee.phone%type;
begin
select
emp_name, phone
into
v_emp_name, v_phone
from
employee
where
emp_id = '&사번';
dbms_output.put_line('사원명 : ' || v_emp_name);
dbms_output.put_line('전화번호 : ' || v_phone);
end;
/
☞ %rowtype
- 기존 테이블을 행 단위로 참조
declare
erow employee%rowtype;
begin
select
*
into
erow
from
employee
where
emp_id = '&사번';
dbms_output.put_line('사원명 : ' || erow.emp_name);
dbms_output.put_line('이메일 : ' || erow.email);
dbms_output.put_line('급여 : ' || erow.salary || '원');
end;
/
행의 모든 컬럼 타입을 erow에 담고, employee 테이블의 조회된 사번의 모든 행을 erow에 담아 필요한 정보만 골라서 출력할 수 있습니다.
☞ record
- 커스터마이징된 컬럼 타입 모음
declare
-- 자료형 생성
type myemptype is record(
v_emp_name employee.emp_name%type,
v_dept_title department.dept_title%type,
v_job_name job.job_name%type
);
-- 변수명 자료형
myemprow myemptype;
begin
select
emp_name,
(select dept_title from department where dept_id = e.dept_code),
(select job_name from job where job_code = e.job_code)
into myemprow
from employee e
where emp_id = '&사번';
dbms_output.put_line('사원명 : ' || myemprow.v_emp_name);
dbms_output.put_line('부서명 : ' || myemprow.v_dept_title);
dbms_output.put_line('직급명 : ' || myemprow.v_job_name);
end;
/
into myemprow에 select된 순서대로 값이 들어가게 되어 해당 값들을 꺼내어 출력할 수 있습니다.
레코드를 이용하여 자료형을 생성!
LIST
'DataBase > Oracle' 카테고리의 다른 글
PL/SQL) 제어문, case 분기문, 반복문 (난수 생성) (0) | 2022.05.02 |
---|---|
PL/SQL) DQL과 DML 처리 (0) | 2022.05.02 |
PL/SQL) PL/SQL이란?, 익명 블럭 기초 (0) | 2022.05.02 |
DB객체) INDEX 객체(장단점, 실행계획, 사용 시 주의점) (0) | 2022.04.29 |
DB객체) SEQUENCE 객체 (nextval, currval) (0) | 2022.04.29 |