-- PL/SQL支持执行动态SQL
-- PL/SQL支持错误码ZERO_DIVIDE、VALUE_ERROR
-- 支持raise_application_error
-- PL/SQL支持自定义exception
-- PL/SQL支持依据PACKAGE变量类型创建新的变量
-- PL/SQL支持PACKAGE常量
-- PL/SQL支持隐式游标
-- PL/SQL支持自定义复合类型变量直接赋值
-- 支持存储过程无参数不带括号执行
-- 完善PACKAGE权限管理
-- 修复使用绑定变量时空串和NULL的等价转换问题

halo0root=# BEGIN
halo0root$# FOR rec IN (SELECT *
halo0root$# FROM dual)
halo0root$# LOOP
halo0root$# DBMS_OUTPUT.put_line (rec.dummy);
halo0root$# END LOOP;
halo0root$# END;
halo0root$# /
X
DO
halo0root=# declare
halo0root$# pnum number;
halo0root$# begin
halo0root$# pnum:='abc';
halo0root$# exception
halo0root$# when VALUE_ERROR then dbms_output.put_line('算术或转化错误');
halo0root$# when others then dbms_output.put_line('其他例外');
halo0root$# end;
halo0root$#
算术或转化错误
DO
halo0root=# DECLARE
halo0root$# v_student_id int := -20;
halo0root$# v_total_courses EXCEPTION;
halo0root$# e_invalid_id EXCEPTION;
halo0root$# BEGIN
halo0root$# if v_student_id < 0 THEN
halo0root$# raise v_total_courses;
halo0root$# end if;
halo0root$# exception
halo0root$# when e_invalid_id then
halo0root$# dbms_output.put_line('e_invalid_id');
halo0root$# when v_total_courses then
halo0root$# dbms_output.put_line('v_total_courses');
halo0root$# end;
halo0root$# /
v_total_courses
Do
halo0root=# DECLARE
v_num1 integer := 201;
v_num2 integer := 0;
v_result number;
BEGIN
v_result := v_num1 / v_num2;
DBMS_OUTPUT.PUT_LINE ('v_result: '||v_result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE ('A number cannot be divided by zero.');
END;
/
A number cannot be divided by zero.
DO




