[PL/SQL] 제어문 & 사용자 정의 함수

HyunDong Lee·2022년 9월 14일
0

PL/SQL

목록 보기
1/8
post-thumbnail

익명 블록과 달리 함수와 프로시저는 데이터베이스 내에 저장되고 컴파일되므로 언제든지 재사용이 가능하다.

IF문

조건 1개

IF 조건 then
조건 처리;
end if;

조건 2개

if 조건 then

조건 처리1;

else

조건 처리2;

end if;

조건 n개

if 조건1 then
조건 처리1;
elsif 조건2 then
조건 처리2;
else
조건 처리n;
end if;

    DECLARE
      vn_salary NUMBER := 0;
      vn_department_id NUMBER := 0;
    BEGIN
      vn_department_id := ROUND(DBMS_RANDOM.VALUE (10, 120), -1);

       SELECT salary
         INTO vn_salary
         FROM employees
        WHERE department_id = vn_department_id
          AND ROWNUM = 1;

      DBMS_OUTPUT.PUT_LINE(vn_salary);

      IF vn_salary BETWEEN 1 AND 3000 THEN
         DBMS_OUTPUT.PUT_LINE('낮음');
      ELSIF vn_salary BETWEEN 3001 AND 6000 THEN
         DBMS_OUTPUT.PUT_LINE('중간');
      ELSIF vn_salary BETWEEN 6001 AND 10000 THEN
         DBMS_OUTPUT.PUT_LINE('높음');
      ELSE
         DBMS_OUTPUT.PUT_LINE('최상위');
      END IF;
    END;

결과

13000

최상위

Loop문

당연히 반복문이다

LOOP
  처리문;
  exit [when 조건];
end loop;

While문

while 조건
  loop
    처리문;
end loop;

For문

for 인덱스 in 초깃값..최종값
loop
  처리문;
end loop;

사용자 정의 함수

  • 모듈러 함수를 구현한다
  • create or replace function을 통해 함수를 만들고 실행한다
  • declare 아래 선언부, begin 아래 실행문, 끝에 항상 end를 찍어줘야 함
create or replace function new_mod(num1 number, num2 number)
    return number
is
    vn_rem number := 0;
    vn_quo number := 0;
begin
    vn_quo := floor(num1/num2);
    vn_rem := num1 -(num2*vn_quo);

    return vn_rem;
end;

declare
       vn_res number := new_mod(10, 3);
begin
    dbms_output.put_line('10 % 3 = ' || vn_res);
end;

함수 호출

실제 함수를 호출하는 방식은 방금 위의 예제를 통해 확인하였다
sql 함수와 같이 pl/sql함수는 select문에서 사용할 수 있다

create or replace function new_mod(num1 number, num2 number)
    return number
is
    vn_rem number := 0;
    vn_quo number := 0;
begin
    vn_quo := floor(num1/num2);
    vn_rem := num1 -(num2*vn_quo);

    return vn_rem;
end;

select new_mod(20, 3) as result
from dual;

위 그림을 통하여 해당 값이 제대로 테이블 형태로 나오는 것을 알 수 있음.

매개변수와 함수
매개 타입이 없는 함수는 '()'를 붙여도 때도 실행 가능하다

create or replace function get_user
    return varchar2
is
    vn_user_name varchar2(80);
begin
    select user
    into vn_user_name
    from dual;

    return vn_user_name;
end;

select get_user(), get_user
from dual;

0개의 댓글