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;
pl/sql(二) 流程控制語句