--rowtype 변수를 활용한 데이터의 변경

declare
  c_rec row_test%rowtype;  -- c_rec의 타입을 row_test로
begin
  select * into c_rec 
  from row_test
  where no=3; -- no가 3인 행 전체를 c_rec로
  
  c_rec.name := '강길동';  -- c_rec의 name을 강딜동으로
  
  update row_test2
  set row = c_rec -- 테이블의 행 의미
  where no = 3; -- c_rec로 update
  
end;
/

select * from row_test2;


-- 사용자로부터 두 개의 숫자를 입력 받아서 합을 구하는 예
-- 치환 연산자 & 사용
declare
  no1 number := &no1; -- 치환 변수 사용
  no2 number := &no2;
  vsum number;
  
begin
  vsum := no1+no2;
  dbms_output.put_line('첫 번째 수 : '||no1||', 두 번째 수 : '||no2||', 합 : '||vsum||' 입니다.');
  
end;
/


/*
복합변수
  record type 변수 지정 방법
  1. type 타입명 is record();
  2. 식별자 타입명; -- 변수처럼...?

*/

declare
  type emp_rec is record
  (emp_id employees.employee_id%type,
    emp_name employees.first_name%type,
    emp_job employees.job_id%type
  );
  
  rec1 emp_rec;
    
begin
  select employee_id, first_name, job_id
  into rec1
  from employees
  where department_id = 10;
  
  dbms_output.put_line('사번  이름    업무아이디');
  dbms_output.put_line(rec1.emp_id||' '||rec1.emp_name||' '||rec1.emp_job);
end;
/



declare
type emp_rec2 is record(
  emp_id employees.employee_id%type,
  emp_name employees.last_name%type,
  emp_email employees.email%type,
  emp_salary employees.salary%type
);  -- 복합변수 만들어서
rec2 emp_rec2;  -- rec2에 넣고

vemp_id employees.employee_id%type := '&empid'; -- vemp_id를 입력값으로

begin
  select employee_id, last_name, nvl(email, '없음'), salary
  into rec2
  from employees
  where employee_id = vemp_id;  -- 입력한 vemp_id 값이 employee_id와 같으면 rec2에 넣기
  
  dbms_output.put_line('사번 : '||rec2.emp_id);
  dbms_output.put_line('이름 : '||rec2.emp_name);
  dbms_output.put_line('이메일 : '||rec2.emp_email);
  dbms_output.put_line('급여 : '||rec2.emp_salary);
  
end;
/


'Oracle' 카테고리의 다른 글

조건문(if문, case문)  (0) 2017.09.15
[SQL Developer] Line number 표시 방법  (0) 2017.09.14
PL/SQL 변수 선언 및 데이터 타입  (0) 2017.09.14
PL/SQL 개념  (0) 2017.09.14
계층형 쿼리  (0) 2017.09.13

+ Recent posts