选择结构
If **** then
****
else
****
end if;
If **** then
****
elsif then
****
end if;
CASE test_value
when value1 THEN statements1;
when value2 THEN statements2;
……
when valuen THEN statementsn;
[ELSE else_ statements;]
END CASE;
循环结构
While **** loop
****
end loop;
Loop
exit //一定要有exit,不然死循环
end loop;
For x in 1..100 loop
****
end loop;
跳转结构
<<lable>>
goto
块内可以跳转,内层块可以跳到外层块,但外层块不能跳到内层。
不能从IF语句外部跳入IF语句内部。不能从循环体外跳入循环体内。不能从子程序外部跳到子程序中
DECLARE
v_counter BINARY_INTEGER :=1;
BEGIN
<<LABEL>>
INSERT INTO temp_table VALUES (v_counter, 'Loop index');
v_counter := v_Counter + 1;
IF v_counter<=50 THEN
GOTO LABEL;
END IF;
END;
求素数
DECLARE
v_start number(4);
v_end number(4);
v_flag number(1):=0;
BEGIN
v_start :=&start_num;
v_end :=&end_num;
for x in v_start..v_end loop
for y in 2..sqrt(x) loop
if mod(x,y)=0 then
v_flag:=0;
exit;
else
v_flag:=1;
end if;
end loop;
if v_flag=1 then
dbms_output.put_line(x);
end if;
end loop;
END;