/*
변수
- 변수의 생성 규칙
1. 반드시 문자로 시작
2. 문자나 숫자, 특수문자를 포함할 수 있다.
3. 변수명은 30byte 이하
4. 예약어(select, begin, declare...)로는 불가
- 변수의 선언은 선언부(declare)에서 선언
값으로 초기화도 가능
- 실행부에서 실행될 경우 값이 할당된다.
- 서브프로그램의 파라미터로 전달되기도 하며, 서브프로그램의 출력 결과를 저장하기도 함.
선언ex
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 : 날짜 및 시간을 초단위로 저장
날짜의 범위는 4712 B.C ~ 9999 A.D
timestamp : date 타입을 확장한 개념. 연도, 월, 일, 시, 분, 초 및 소수로 표시되는 초단위를 저장
자릿수를 표현할 때는 0~9범위의 정수를 사용, 기본값은 0
참조변수
변수명 테이블명.필드명%TYPE
empNo employees.employee_id%TYPE -- employee의 타입을 그대로 참조
: employees 테이블의 employee_id와 동일한 데이터 타입으로 선언
emp_name employees.first_name%TYPE
: employees 테이블의 first_name과 동일한 데이터 타입으로 선언
empRow employees%ROWRYPE
: employees 테이블의 모든 컬럼을 한꺼번에 저장하기 위한 변수로 선언
*/
-- 이거 항상 해두자
set serveroutput on;
create table employees1 as
select employee_id, salary, department_id
from employees;
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;