/*
  변수
  - 변수의 생성 규칙
    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;

'Oracle' 카테고리의 다른 글

[SQL Developer] Line number 표시 방법  (0) 2017.09.14
rowType 변수 및 복합변수 활용 예  (0) 2017.09.14
PL/SQL 개념  (0) 2017.09.14
계층형 쿼리  (0) 2017.09.13
시퀀스 사용하기  (0) 2017.09.13

+ Recent posts