/*
변수
- 변수의 생성 규칙
: 반드시 문자로 시작해야 한다
: 문자나 숫자, 특수문자를 포함할 수 있다
: 변수명은 30byte이하여야 한다
: 예약어(키워드)를 사용할 수 없다
- 변수의 선언은 선언부(declare)에서 선언, 값으로 초기화 가능
- 실행부에서 실행될 경우 값이 할당된다
- 서브프로그램의 파라미터로 전달되기도 하며, 서브 프로그램의 출력결과를 저장하기도 한다
- 변수 선언 예
emp_no number(6,3) : 숫자를 저장하는 변수로 총6자리를 의미하며, 소수점 이하 3자리를 의미한다.
emp_name varchar2(5) : 문자를 저장하는 변수로 총 5byte를 저장할 수 있다.
emp_date date : 날짜를 저장하는 변수
- 변수의데이터 타입
char : 고정길이의 문자를 저장, 기본최소값 1 ~ 최대 32,767byte를 저장
varchar2 : 가변길이의 문자를 저장, 기본값은 없다. 최대 32,767byte 값을 저장
number(전체자릿수, 소수점이하 자릿수) : 전체자릿수와 소수점이하 자리 수를 가진 숫자를 저장
전체자리 수 범위는 1~38까지 가능하고, 소수점 자리수의 범위는 -84~127까지 가능
binary_double : 부동 소수점 수를 저장, 9byte 필요
date : 날짜 및 시간을 저장, 초단위로 저장
날짜의 범위는 4712B.C ~ 9999A.D
timestamp : date 타입을 확장한 개념, 연도 / 월 / 일 / 시 / 분 /초 및 소수로 표시되는 초단위를 저장
자리수를 표현할 때는 0~9 범위의 정수를 사용, 기본값은 6
- 참조변수
테이블명.필드명%TYPE
empNo empolyees.employee_id%TYPE <- employees테이블의 employee_id타입을 empNo의 타입으로 사용하겠다는 의미
emp_name employees.first_name%TYPE <- employees테이블의 first_name과 동일한 데이터 타입으로 선언
empRow employees%ROWTYPE <- employees테이블의 모든 칼럼을 한꺼번에 저장하기위한 변수로 선언
*/
create table employees1 as
select employee_id, salary, department_id
from employees;
select * from employees1;
set serveroutput on;
declare
empNo employees1.employee_id%TYPE;
empSalary employees1.salary%TYPE;
begin
select employee_id, salary
into empNo, empSalary
from employees1
where department_id = 10;
dbms_output.put_line(empNo ||' '||empSalary);
end;
/
declare
emp_row employees1%RowType;
begin
select * into emp_row
from employees1
where employee_id = 100;
dbms_output.put_line( emp_row.employee_id || ' ' || emp_row.salary || ' ' || emp_row.department_id );
end;
/
create table row_test(
no number,
name varchar2(20),
hdate date
);
create table row_test2 as
select * from row_test;
insert into row_test
values(1,'아무개',sysdate);
insert into row_test
values(2,'홍길동',sysdate);
insert into row_test
values(3,'고길동',sysdate);
select * from row_test;
commit;
declare
c_rec row_test%ROWTYPE;
begin
select * into c_rec
from row_test
where no=3;
insert into row_test2
values c_rec;
end;
/
select * from row_test2;