-- 顺序控制,关键字:goto null
declare
v_age number := '&输入年龄:';
begin
if v_age < 18 then
goto young; -- 跳到<<young>>,按顺序往后执行
elsif v_age <30 then
goto strong; -- 跳到<<strong>>,按顺序往后执行
else
goto older; -- 跳到<<older>>,按顺序往后执行
end if;
<<young>>
null;
<<strong>>
dbms_output.put_line('strong');
<<older>>
dbms_output.put_line('older');
end;
--动态执行sql语句,关键字:execute immediate
declare
v_sql varchar2(222);
v_emp_rec emp%rowtype;
begin
v_sql := 'select * from emp where empno =: num'; --'=:'为占位符,标示符不能用关键字,如number
execute immediate v_sql into v_emp_rec
using 7369;-- 给占位符绑定值
dbms_output.put_line(v_emp_rec.ename);
end;
-- 异常,预定义异常,关键字 exception when then
declare
v_emp emp%rowtype;
v_sql varchar2(200);
v_ename emp.ename%type;
begin
v_sql := 'select * from emp';
execute immediate v_sql into v_emp;
--v_sql := 'select ename from emp where empno = 7396';
--execute immediate v_sql into v_ename;
exception
when too_many_rows then -- too_many_rows为异常类型,还有一个data
dbms_output.put_line('太多行了!');
--when data_not_found then
--dbms_output.out_line('没有找到!');
end;
-- 异常,自定义异常,关键字:exception raise
declare
v_ageException exception; -- 异常类型 exception
v_age number := '&年龄:';
begin
if v_age > 120 then
raise v_ageException; -- 满足条件时,raise抛出异常
else
dbms_output.put_line(v_age);
end if;
exception
when v_ageException then
dbms_output.put_line('年龄太大了!');
end;
转载于:https://blog.51cto.com/ysjian/1127202