다연이네

[days15] 저장 프로시저의 파라미터 in, out, in out 본문

Oracle

[days15] 저장 프로시저의 파라미터 in, out, in out

 다연  2020. 11. 18. 21:59
반응형

저장 프로시저의 파라미터 : in(입력용), out(출력용), inout(입출력용) 

 

1) 출력용 매개변수 테스트

create or replace procedure up_out_test
(
    pin1 in number --만약10
    ,pin2 in number --20 넣으면
    ,pout1 out number --그 두갤 더해 밖으로 출력하도록
)
is
begin
    pout1 := pin1 + pin2;
    dbms_output.put_line('> 처리완료!!!');
--exception
end;

variable result number; --변수선언
exec UP_OUT_TEST(10,20,:result); --1번
print result; --2번

1번
2번

variable : 세션이 살아있는 동안 사용할 수 있는 변수를 선언할 떄 사용

 

세션 ? 한 사람이 db의 scott계정으로 접속하면 접속이 끊어질떄 까지 그 사람의 세션이 만들어짐
          오라클에서 session이란 데이터베이스에 접속하여 일련의 SQL문을 실행한 후

          데이터베이스로부터 종료하는 시점까지를 말한다.

-> 고로 result라고 하는 변수는 세션이 끊어질 때까지 살아있다.

 

 

 

IN/OUT 입출력 매개변수 사용  예) 주민번호(14) -> 앞의 6자리 반환

create or replace procedure up_inout_test
(
    --prrn in varchar2 --주민번호 14자리 in(받아오기)
    --,prrn6 out varchar2 이렇게 두개 선언하지 않고 바로 출력도 해주는 inout 동시에 쓰겠다 
    prrn in out varchar2
)
is
begin
   prrn := substr(prrn,0,6); --이놈은 out용으로 사용하고는 앞자리 6자리 짤라서 넘기겠다는의미
--exception
end;
--Procedure UP_INOUT_TEST이(가) 컴파일되었습니다.


begin
 :rrn6 := '980730-2031122';
end;
--1번


exec up_inout_test(:rrn6);
print rrn6;
--2번

1번
2번

 

 

 

회원가입할때 아이디 중복 체크 버튼
-       아이디를 사용할 수 있습니다.
-       사용중인 아이디입니다. / 아이디를 사용할 수 있습니다.

-        empno가 아이디라고 가정

create or replace procedure up_empno_check
(
    pempno in number
    ,pempnocheck out number --0(사용가능) / 1(사용불가) 반환
)
is
begin
    select count(*) into pempnocheck --카운트 값을 pempnocheck에 저장, out으로 반환
    from emp
    where empno = pempno;
    
    dbms_output.put_line(pempnocheck);
--exception
end;


variable empcheck number;

begin
    up_empno_check(9999, :empcheck);
    if(:empcheck=1) then 
    dbms_output.put_line('사용중');
    else 
    dbms_output.put_line('사용가능');
    end if;
end;

있는 deptno 입력시 사용중 출력 아니면 사용가능 출력

 

 

프로시저명 up_emp_logon 로그인
-    id 존재하지 않으면 1 , id 존재하지만 pw 아니면 2, 다 맞으면 0 
-    id: empno, pw: ename

create or replace procedure up_emp_logon
(
    pempno in number             --id     in
    ,  pename in varchar2          --pwd    in
    ,  plogoncheck out number   -- 1,2,0    out
)
is
   vempno number(1) ;   --  0    1(아이디존재)
   vename emp.ename%type;
begin
   select count(*) into vempno
   from emp
   where empno = pempno;
   if  vempno = 0 then
        plogoncheck := 1;
   else
      select ename into vename
      from emp
      where empno = pempno;      
      if pename = vename then
         plogoncheck := 0;
      else
         plogoncheck := 2;
      end if;      
   end if;
--exception
end;

var logoncheck number;
begin
 up_emp_logon(7369, 'SMITH', :logoncheck);
 dbms_output.put_line(:logoncheck);
end;

 

 

 

반응형
Comments