PL/SQL笔记(1)-流程控制,循环,异常,块
流程控制
1.If,then,else,elsif(不是elseif)
if a='1' then null; endif;
2.Case
简单case表达式:
搜索型Case表达式:
3.goto语句
begin if true then goto label2; end if; <<label1>> SYS.DBMS_OUTPUT.PUT_LINE('label1'); <<label2>> SYS.DBMS_OUTPUT.PUT_LINE('label2'); end;
循环控制
简单循环: Exit,Exit when condition退出循环
while循环:
for循环:两种,一个是面向数值的for,一种是面向游标的for
面向数值: (..)是范围操作符,1..5表示1到5
begin FOR j IN 1..5 LOOP dbms_output.Put_line(j); END LOOP; END; end;
面向游标:
declare cursor myCursor is select * from ouser; begin FOR s IN myCursor LOOP dbms_output.Put_line(s.userid); END LOOP; END;
continue,continue when语句
结束本轮循环;
--只输出偶数 begin FOR j IN 1..100 LOOP Continue when Mod(j,2)=1; dbms_output.Put_line(j); END LOOP; end;
异常处理
1.命名异常和匿名异常
命名异常有名字,匿名异常只有异常代码和消息
SQLCODE函数可以获取最后一个异常的异常代码,SQLERRM:异常消息
declare myexception exception; --声明一个命名异常 v_row Sys_ACC_User%RowType; Pragma EXCEPTION_INIT (myexception, -20002); --将一个命名异常和一个异常代码绑定 begin select * into v_row from Sys_ACC_User where rownum=1; raise myexception; --手动抛出异常 RAISE_APPLICATION_ERROR(-20001,'这是一个匿名异常,我没有名字'); --手动抛出一个匿名异常 Exception when no_data_Found then --捕获名为no_data_found的异常 dbms_output.Put_line('not data found'||'异常代码:'||SQLCODE||' 异常消息'||SQLERRM); when myexception then --捕获名为 myexception的异常 dbms_output.Put_line('myexception'||'异常代码:'||SQLCODE||' 异常消息'||SQLERRM); when others then --其他命名异常和匿名异常在这里捕获 dbms_output.Put_line('异常代码:'||SQLCODE||' 异常消息'||SQLERRM); end;
Oracle块:
块组成:块头,声明单元,执行单元,异常处理单元
函数,存储过程均为块结构,命名块
create or replace function WordCount(str in varchar2)return number --块头 is numCount number default:=0;--声明单元 begin --执行单元 return Length(LTrim(str,'0')); Exception --异常处理单元 when others then: SYS.DBMS_OUTPUT.PUT_LINE('error'); end ;
匿名块
匿名块没有块头
declare --声明单元 v_n1 varchar2(100); begin --执行单元 v_n1:='20'; SYS.DBMS_OUTPUT.PUT_LINE(v_n1); exception --异常处理单元 when others then SYS.DBMS_OUTPUT.PUT_LINE('error'); end;
其他:
1.转义: q’<s’d>’,表示为: s’d ,<和>必须成对出现,可用(),{},[]等代替
2.Function必须返回值,不想返回值的用Procedure
3.如果Procedure有参数(In/Out),调用方式: ProcedureName(param1,param2);如果procedure没有参数,则直接: ProcedureName或者ProcedureName(),Function类似…
4.空字符 ’’is Null =>true
zhxjdwh:http://www.cnblogs.com/zhxj/