SQL随记(四)
1.for loop 循环
格式:for index in lower .. upper
loop
end loop;
for i in 1 .. g_descTbl.count loop if ( g_descTbl(i).col_type = 12 ) then utl_file.put( l_output, l_sep || g_descTbl(i).col_name || ' date ''ddmmyyyyhh24miss'' '); else utl_file.put( l_output, l_sep || g_descTbl(i).col_name || ' char(' || to_char(g_descTbl(i).col_max_len*2) ||' )' ); end if; l_sep := ','||g_nl ; end loop;
2.sql的异常处理:
(1)系统运行出错时自动抛出
(2)使用RAISE关键字抛出任何的异常,格式:RAISE exception_name;
declare is_exception EXCEPTION; bein RAISE is_exception; end;
(3)使用Raise_Application_Error 抛出异常,它能抛出一个异常并给异常赋予一个错误号以及错误信息。格式: Raise_application_error(error_number,message[,true,false])
begin Raise_application_error(-20123,'can not find error',true); end;
(4)用户自定义异常
declare ex_exception EXCEPTION; --定义异常 PRAGMA EXCEPTION_INIT(ex_exception , -2292); --给自定义异常进行关联 begin DELETE FROM departments WHERE department_id = v_deptno; IF SQL%NOTFOUND THEN RAISE ex_exception ; --抛出 END IF; EXCEPTION WHEN ex_exception THEN --处理 DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); end;