一、条件与顺序控制
- IF语句
要点:
a、一个if总要有一个匹配的end if;
b、在关键字end和if之间一定要有空格;
c、关键字elsif中不要夹带e;
d、只在关键字end if后使用分号(;)
具体表现形式:
a、IF THEN END IF
if和then之间的条件决定then与end if之间的逻辑是否会被执行;如果条件为false或null时,指定逻辑不被执行。
b、IF THEN ELSE END IF
此种情况实现了逻辑上的二选一;通过if与then之间的条件结果决定是then与else之间的逻辑被执行,还是else与end if之间的逻辑被执行,总之,此种结构下一定会执行两种逻辑之一。
c、IF THEN ELSIF ELSE END IF
这是if语句中最复杂的语句;根据各种条件为true的情况下执行相应的逻辑。事实上,当使用到这种结构时,可以考虑是否应该使用case结构。同时,应该注意:每个elsif字句在condition之后一定要跟一个then。
- CASE语句
要点:
a、else语句是可选的,如果没有else语句,并且没有一个表达式的求值结果是true,就会抛出一个case_not_found异常。
b、when表达式是按照从上到下的顺序被依次求值。
c、一旦某些语句被执行,整个执行也就结束。意思是:即使有多个表达式求值结果都是true,也只有和第一个表达式关联的语句会被执行。
具体表现形式:
a、简单的CASE语句
CASE expression
WHEN result1 THEN stat1
WHEN result2 THEN stat2
…
ELSE stat_else
END CASE;
语句中的else部分可有可无;pl/sql处理逻辑:首先对expression求值,之后将expression的结果与result1比较,如果两者相匹配stat1将被执行;否则检查result2,如此下去。
b、搜索型CASE语句
CASE
WHEN result1 THEN stat1
WHEN result2 THEN stat2
…
ELSE stat_else
END CASE;
一个搜索型语句类似于简单CASE语句中expression为true的情况。
- CASE表达式
要点:
a、只返回一个单独的值;
b、不要使用分号或者end case关键字来作case表达式的结尾;
c、case表达式仅使用一个end关键字作为结束。
具体表现形式:
a、简单的case表达式 :=CASE expression
WHEN result1 THEN return_exp1
WHEN result2 THEN return_exp2
…
ELSE return_exp_else
END;
b、搜索型的case表达式 :=CASE
WHEN result1 THEN return_exp1
WHEN result2 THEN return_exp2
…
ELSE return_exp_else
END;
例子:
declare
boolean_true Boolean := true;
boolean_false boolean := false;
boolean_null boolean;
function boolean_to_varchar2(flag in boolean) return varchar2 is
begin
return case flag when true then ‘True‘ when false then ‘False‘ else ‘Null‘ end;
end;
begin
dbms_output.put_line(boolean_to_varchar2(boolean_true));
dbms_output.put_line(boolean_to_varchar2(boolean_false));
dbms_output.put_line(boolean_to_varchar2(boolean_null));
end;
- NULL语句
语法格式:NULL;
将保留字null与分号(;)结合构成null语句。null语句代表没有执行逻辑。特别是当else字句没有自己的逻辑的时候,可以用来增强代码的可读性。
二、迭代结构(循环)
三、异常处理