문장 출력하기

-- 문장 출력하기
set serveroutput on;

 

 

🍀 반복문

-- 반복문의 종류
-- loop(무한반복문), for, while


-- 1부터 10까지 출력하기

-- loop 무한반복문
declare
  n number := 1;
begin
  loop 
  dbms_output.put_line(n);
  n := n + 1; 
  
  -- eixt (반복문 강제 종료)
  if (n > 10) then 
   exit;
  end if;
  
  end loop;
end;
/


-- for문 형식
declare
  
begin
 for 변수 in 시작값.. 끝값 loop
 
 end loop;
end;
/

-- for문
-- 실제로는 숫자를 넣는 경우는 거의 없다

declare
  
begin
 for n in 1..10 loop -- 1부터 10까지 1씩 증가한다. (10번 반복)
  dbms_output.put_line(n);
 end loop;
end;
/

-- 반복문을 사용해 사원들의 정보를 가져오기
-- select 구문은 하나만 가지고 올 수 있다
-- 때문에 반복문을 활용하면 된다.
declare
  vdept dept%rowtype;
begin
  
  for n in 1..4 loop
  
  select * into vdept
  from dept
  where deptno = 10 * n;
  
  dbms_output.put_line(vdept.deptno || ' : ' || vdept.dname || ' : ' || vdept.loc);
  
  end loop;

end;
/

-- while 문
declare
 
begin
while 조건식 loop 

end loop;
end;
/

-- while 문
declare
 n number := 1;
begin
 while n <= 10 loop 
  dbms_output.put_line(n);
  n := n + 1;
 end loop;
end;
/

-- while 문을 사용해 dept 테이블 4개 출력 
declare
 vdept dept%rowtype;
 n number := 1;
begin
 while n <= 4 loop

  select * into vdept
  from dept
  where deptno = 10 * n; 
  
  dbms_output.put_line(vdept.deptno || ' : ' || vdept.dname || ' : ' || vdept.loc);
 
  n := n + 1;
end loop;

end;
/

 

 

🍀 저장 프로시져

-- 저장 프로시져
-- 누구든 권한만 가지고 있으면 이 프로시져를 사용할 수 있다

create [or replace] procedure 프로시져명 [(매개변수1, 매개변수2, 매개변수3,...)]

is
 변수
begin

end;
/
-- 데이터 삭제 프로시져
create or replace procedure del_all

is

begin
 delete from emp01;
end;
/

select * from emp01;

-- 프로시져 실행
execute del_all;

 

 

  • 문제 풀어보기

— sel_all 이란 이름의 저장프로시져 만들기

— dept 테이블의 레코드 모두 조회해서 출력

create or replace procedure sel_all

is
 vdept dept%rowtype;
 n number := 1;
begin

 while n <= 4 loop

begin 
 select * into vdept
 from dept
 where deptno = 10 * n; 
 
 dbms_output.put_line(vdept.deptno || ' : ' || vdept.dname || ' : ' || vdept.loc);
 
 end;
 
 n := n + 1;
end loop;
 
end;
/

select * from dept;

execute sel_all;

 

 

🍀 매개변수를 사용하는 프로시저

-- 매개변수를 사용하는 프로시저
-- in, out, in out 총 3가지 형태
-- 기본은 in 타입, 필요하면 out 타입
-- in은 데이터를 받고, out은 데이터를 호출, in out은 둘다 가능

-- 특정데이터만 골라서 삭제하는 프로시저
create or replace procedure del_ename(vename emp01.ename%type)
is

begin
 delete from emp01
 where ename = vename;
end;
/

execute del_ename('SMITH');

select * from emp01;

-- 매개변수 in , out 타입
create or replace procedure sel_empno
(
 vempno in emp.empno%type,
 vename out emp.ename%type,
 vsal out emp.sal%type,
 vjob out emp.job%type
)

is 
 -- 변수
begin
 select ename,sal,job into vename, vsal, vjob
 from emp
 where empno = vempno;
end;
/

-- 실행
-- 바인드 변수
variable var_ename varchar2(15);
variable var_sal number;
variable var_job varchar2(9);


execute sel_empno(7788, :var_ename, :var_sal, :var_job);

print var_ename;
print var_sal;
print var_job;
-- 문제
-- 저장프로시저명 : sel_empname
-- 사워명으로 검색해서 해당사원의 직책을 얻어와서 print 명령어로 값을 출력

create or replace procedure sel_empname
(
 vename in emp.ename%type,
 vjob out emp.job%type
)

is

begin
 select job into vjob
 from emp
 where ename = vename;
end;
/

variable var_job varchar2(9);

execute sel_empname('SCOTT', :var_job);

print var_job;

+ Recent posts