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/
PL/SQL笔记(1)-流程控制,循环,异常,块的更多相关文章
- PL/SQL程序设计、流程控制
PL/SQL是 Procedure Language & Structured Query Language 的缩写 PL/SQL是对SQL语言存储过程语言的扩展 PL/SQL程序由三个块组成 ...
- 二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)
一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...
- python学习第七天流程控制循环while和循环for区别
流程控制循环是任何编程语言都有一种循环结构,在python while 和break continue 搭配使用,还一种while ....else ......,for循环有序列表和字符串 whil ...
- pl/sql 笔记之基础(上)
由于公司中使用 oracle,而本人对存储过程一直也懵懵懂懂,故一周时间学习了一遍 pl/sql,在此记下笔记!!! 一.前提,pl/sql 是啥? 1.PL/SQL是一种高级数据库程序设计语言,该语 ...
- PL/SQL控制语句(二、循环控制语句)
循环允许重复执行代码直到循环条件匹配,PL/SQL中循环主要有LOOP语句和EXIT语句两种,这两种语句相辅相成,一起组成了PL/SQL的循环结构.在PL/SQL中,循环分为四大类,本文将会讲解其中的 ...
- PL SQL笔记(三)
loop then .. exit; end if; end loop; select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual; sel ...
- 《Node.js In Action》笔记之流程控制
转向Javascript后,开始学习了node.js,选择的第一本书是<Node.js in Action> 将近一个月时间,断断续续看完,选几个点做下笔记 1.实现串行化流程控制 var ...
- pl/sql 笔记之存储过程、函数、包、触发器(下)
一.存储过程.存储函数 1.What's This? ①.ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. ②.存储过程.存储函数的唯 ...
- 【原】Java学习笔记005 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...
随机推荐
- Android 的assets文件资源与raw文件资源读取
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/34504183 res/raw和assets的同 ...
- js中字符串函数indexOf与search的区别
IndexOf()方法是用来判断一个字符串是否存在于一个更长的字符串中.从长字符串左端到右端来搜索,如果存在该子字符串就返回它所处的位置(即索引).如果在被搜索的字符串没有找到要查找的字符串返回-1. ...
- POJ3281 Dining —— 最大流 + 拆点
题目链接:https://vjudge.net/problem/POJ-3281 Dining Time Limit: 2000MS Memory Limit: 65536K Total Subm ...
- python读取一个文件的每一行判断是否为素数,并把结果写到另一个文件中
刚刚学习python的菜鸟,这道题包括:文件的读写,python的参数调用,异常的使用,函数的使用 创建一个文本文件inti_prime.txt 执行命令:python Prime.py init_p ...
- 第三届蓝桥杯C++B组省赛
1.微生物增值 2.古堡算式 3.海盗比酒量 4.奇怪的比赛 5.方阵旋转 6.大数乘法 7.放棋子 8.密码发生器 9.夺冠概率 10.取球博弈
- 全排列 STL
#include<iostream> #include<algorithm> #include<stdio.h> using namespace std; int ...
- Java中的switch语句
switch可以替代if..else..,另外据说switch采用二分搜索,效率会更高一点. switch(type) { case 1 : type_name="INCOMING" ...
- POJ2443 Set Operation (基础bitset应用,求交集)
You are given N sets, the i-th set (represent by S(i)) have C(i) element (Here "set" isn't ...
- IOS中的沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...
- BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...




