流程控制

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/

PL/SQL笔记(1)-流程控制,循环,异常,块的更多相关文章

  1. PL/SQL程序设计、流程控制

    PL/SQL是 Procedure Language & Structured Query Language 的缩写 PL/SQL是对SQL语言存储过程语言的扩展 PL/SQL程序由三个块组成 ...

  2. 二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)

    一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...

  3. python学习第七天流程控制循环while和循环for区别

    流程控制循环是任何编程语言都有一种循环结构,在python while 和break continue 搭配使用,还一种while ....else ......,for循环有序列表和字符串 whil ...

  4. pl/sql 笔记之基础(上)

    由于公司中使用 oracle,而本人对存储过程一直也懵懵懂懂,故一周时间学习了一遍 pl/sql,在此记下笔记!!! 一.前提,pl/sql 是啥? 1.PL/SQL是一种高级数据库程序设计语言,该语 ...

  5. PL/SQL控制语句(二、循环控制语句)

    循环允许重复执行代码直到循环条件匹配,PL/SQL中循环主要有LOOP语句和EXIT语句两种,这两种语句相辅相成,一起组成了PL/SQL的循环结构.在PL/SQL中,循环分为四大类,本文将会讲解其中的 ...

  6. PL SQL笔记(三)

    loop then .. exit; end if; end loop; select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual; sel ...

  7. 《Node.js In Action》笔记之流程控制

    转向Javascript后,开始学习了node.js,选择的第一本书是<Node.js in Action> 将近一个月时间,断断续续看完,选几个点做下笔记 1.实现串行化流程控制 var ...

  8. pl/sql 笔记之存储过程、函数、包、触发器(下)

    一.存储过程.存储函数   1.What's This? ①.ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. ②.存储过程.存储函数的唯 ...

  9. 【原】Java学习笔记005 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...

随机推荐

  1. rails elasticsearch searchkick用法

    1.安装elasticsearch 之前要先安装java8: 参考https://www.elastic.co/guide/en/elasticsearch/reference/current/zip ...

  2. xalion三层与Web开发帖子一览表 good

    使用http.sys,让delphi 的多层服务飞起来(Delphi借用http.sys充当http服务器,也就可以发送返回JSON等信息,当然浏览器也可以使用)http://www.cnblogs. ...

  3. dede摘要长度,dedecms摘要限制,dedecms摘要字数

    dede摘要长度,dedecms摘要限制,dedecms摘要字数 如果可以有效控制文章摘要的字数,那么就可以使得页面布局很灵活. 在Dedecms中,在列表页调用文章摘要的方法主要有: 1:[fiel ...

  4. LoadRunner 技巧之 IP欺骗

    IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因:1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量, ...

  5. hdu 1711 Number Sequence 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目意思:给出一条有n个数的序列a[1],a[2],......,a[n],和一条有m 个数的序 ...

  6. netty codec部分剖析

    针对netty 3.2进行剖析 今天用到了netty的encoder和decoder(coder其本质还是handler),特剖析一个netty提供的coder,从而选择或者实现我自己的coder. ...

  7. codeforces 414B B. Mashmokh and ACM(dp)

    题目链接: B. Mashmokh and ACM time limit per test 1 second memory limit per test 256 megabytes input sta ...

  8. macbook pro 一些操作经验记录

    [一]启用root用户 (1)打开终端 (2)输入命令:sudo passwd root (3)给root设置密码 (4)然后再终端输入命令:su root 进行登陆 [二]解压eclipse压缩包, ...

  9. 重新安装VMware10提示"The Msi '' Failed"问题解决方案

    想把虚拟机软件升级以下,没想到卸载的时候不干净,再安装的时候总提示让我先卸载旧版本但实际上旧版本已经卸载过了,这里又没法再卸载一次,所以就提示”The MSI '' failed“ 显然,安装程序还是 ...

  10. 孙鑫C++教学视频

    视频百度云:https://pan.baidu.com/s/1jKf6GoY 在线观看:http://list.youku.com/albumlist/show?id=3567028&asce ...