pl/sql(二) 流程控制语句

相当于java中的if else语句

IF  布尔表达式 THEN
PL/SQL SQL 语句;
END IF;

IF 布尔表达式 THEN
PL/SQL SQL 语句;
ELSE
其它语句;
END IF;

IF     布尔表达式   THEN
PL/SQL SQL 语句;
ELSIF  其它布尔表达式  THEN
其它语句;
ELSIF  其它布尔表达式  THEN
其它语句;
ELSE
其它语句;
END IF;

提示: ELSIF 不能写成 ELSEIF

要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';
若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'

declare
  v_sal employees.salary%type;
 begin
  select salary into v_sal from employees where employee_id=100;
  if v_sal>=10000 then
  dbms_output.put_line('salary>=10000');
  elsif v_sal>=5000 then
  dbms_output.put_line('5000<=salary<10000');
  else dbms_output.put_line('salary<5000');
  end if;
 end;

case表达式

CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;
例子:要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000'; 
若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'

 declare
  v_sal employees.salary%type;
  v_temp varchar2(30);
 begin
  select salary into v_sal from employees where employee_id=100;
    v_temp:=
    case trunc(v_sal/50000)
    when 2 then
    'salary>=10000'
    when 1 then
    '5000<=salary<10000'
    else 'salary<5000'
    end;
    dbms_output.put_line(v_sal||','||v_temp);
 end;

要求: 查询出 122 号员工的 JOB_ID, 若其值为 'IT_PROG', 则打印 'GRADE: A';
'AC_MGT', 打印 'GRADE B',
'AC_ACCOUNT', 打印 'GRADE C';
否则打印 'GRADE D'

/SQL> declare
  2     v_job_id varchar2(10);
  3     v_temp varchar2(10);
  4  begin
  5  select job_id into v_job_id from employees where employee_id=100;
  6  v_temp:=
  7  case v_job_id when 'IT_PROG' then 'A'
  8               when 'AC_MGT' then 'B'
  9               when 'AC_ACCOUNT' then 'C'
 10              else 'D'
 11             end;
 12  dbms_output.put_line(v_job_id||','||v_temp);
 13  end;

 

猜你喜欢

转载自www.cnblogs.com/h-dada/p/9069108.html