1. 程式人生 > >pl/sql(二) 流程控制語句

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

sql 員工 if else語句 tor 打印 job cto else語句 type

相當於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;

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