/*

제어문 : 조건문, 반복문
  - 조건문 : if문, case문
  - 반복문 : basic loop문, while문(반복횟수를 정하지 않을 경우)
            for문(반복횟수를 지정할 경우)
  -- if문 : if~ end if문
     if(조건) then
      실행명령;
     end if;
     
*/

set serveroutput on;


declare
  emp_id employees.employee_id%type;
  emp_name employees.last_name%type;
  emp_dept employees.department_id%type;
  dept_name varchar2(20) := null; -- null 넣기
    
begin
  select employee_id, last_name, department_id
  into emp_id, emp_name, emp_dept
  from employees
  where employee_id = 103;
  
  -- elsif 사용
  -- else if가 아닌 elsif!!
  if(emp_dept = 50) then
    dept_name := 'Shipping';
  elsif(emp_dept = 60) then
    dept_name := 'IT';
  elsif(emp_dept = 70) then
    dept_name := 'Public Relations';
  elsif(emp_dept = 80) then
    dept_name := 'Sales';
  end if;
  
  dbms_output.put_line(emp_id||' '||emp_name||' '||emp_dept||' '||dept_name);

end;
/


declare
  emp_id employees.employee_id%type;
  emp_name employees.last_name%type;
  emp_comm employees.commission_pct%type := null; -- 초기값 null로
  
begin
  select employee_id, last_name, commission_pct
  into emp_id, emp_name, emp_comm
  from employees
  where employee_id = 145;
  
  -- if else 구문
  if(emp_comm > 0 ) then
    dbms_output.put_line(emp_id || ' ' || emp_name || ' 의 보너스는 ' || emp_comm);
  else
    dbms_output.put_line(emp_id || ' ' || emp_name || ' 의 보너스는 없습니다.');
  end if;
  
end;
/


/* case문 case식 */
declare
  emp_id employees.employee_id%type;
  emp_name employees.last_name%type;
  emp_dept employees.department_id%type;
  dept_name varchar2(20) := null;
begin
  select employee_id, first_name, department_id
  into emp_id, emp_name, emp_dept
  from employees
  where employee_id = '&empno'; -- 입력한 값(치환변수)로... (변수명 상관없음)
  
  -- case when then 형식
  dept_name := case emp_dept
              when 50 then 'Shipping'
              when 60 then 'IT'
              when 70 then 'Public Relations'
              when 80 then 'Salses'
              end;

    dbms_output.put_line(emp_id||' '||emp_name||' '||emp_dept||' '||dept_name);
end;
/

SQL Developer 줄번호 표시


도구


환경설정


코드편집기


행여백


행번호표시 체크


'Oracle' 카테고리의 다른 글

반복문(basic loop, while, for loop, continue)  (0) 2017.09.15
조건문(if문, case문)  (0) 2017.09.15
rowType 변수 및 복합변수 활용 예  (0) 2017.09.14
PL/SQL 변수 선언 및 데이터 타입  (0) 2017.09.14
PL/SQL 개념  (0) 2017.09.14
--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