Oracle中PL/SQL的执行部分和异常部分

一.PL/SQL的执行部分。

  • 赋值语句。

    赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值;另一种是通过SQL查询结果赋值。

    用户赋值举例:  

set serveroutput on;
accept abc prompt '请输入abc的值';
DECLARE
a int:= &abc;
BEGIN
dbms_output.put_line(a);
END;

    查询赋值举例: 

set serveroutput on;
DECLARE
str varchar2(20);
BEGIN
select ename into str from emp where empno='7369';
dbms_output.put_line(str);
END;
  • 流程控制语句。

    PL/SQL的主要控制语句如下:

      1.if...then      elsif … then      end if;

        判断if正确则执行then,否则执行else(elsif为嵌套判断)

        注意elsif,里面少一下e.

      2.Case  var  when … then    when … then   end

        有逻辑的从数值中做出选择

      3.Loop     exit    end loop

        循环控制,用判断语句执行exit

      4.Loop       exit when …        end loop

        同上,当when为真时执行exit

      5.while..loop         end loop

        当while为真时循环

      6.for...in...loop        end loop

        已知循环次数的循环

    因为流程控制比较多,在这里就不一一举实例了,写几个比较经典的程序给大家看一下。

    ********打印9*9乘法表*********

        for in..loop

set serveroutput on;
DECLARE
i number;
j number;
BEGIN
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||(i*j)||' ');
end loop;
dbms_output.put_line('');
end loop;
END;

        while  loop

set serveroutput on;
declare
i number:=1;
j number:=1;
begin
while i<10 loop
while j<=i loop
dbms_output.put(i||'*'||j||'='||(i*j)||' ');
j:=j+1;
end loop;
i:=i+1;
j:=1;
dbms_output.put_line('');
end loop;
end;

  

    *********计算1+2+..+10的值*********

      loop exit  & loop exit when

set serveroutput on;                                
declare
i number:=1;
i_sum number:=0;
begin
loop
i_sum:=i_sum+i;
i:=i+1;
if i>10 then
exit;
end if;
end loop;
dbms_output.put(i_sum);
dbms_output.put_line('');
end;

  注意:put只是把输出结果放入缓冲区,直到遇到put_line时才会输出。所以只有put的时候,不会显示i_sum的结果。

  可以把 if i>10 then exit; end if;  换成exit when i>10;这样就成为了loop ..exit when .. end loop 结构。

  *********输入一个字符,判断是字母、数字还是其他字符****************

    if then elsif else

set serveroutput on;
declare
i_char varchar2(2);
begin
i_char:=&abc;
if regexp_like(i_char,'^[a-z]$') then
dbms_output.put_line('输入的是字母');
elsif regexp_like(i_char,'^[0-9]$') then
dbms_output.put_line('输入的是数字');
else
dbms_output.put_line('输入的是其他字符');
end if;
end;

    case  when

set serveroutput on;
declare
i_char varchar2(2);
i_result varchar2(30);
begin
i_char:=&abc;
i_result:=
case
when regexp_like(i_char,'^[a-z]$') then
'输入的是字母'
when regexp_like(i_char,'^[0-9]$') then
'输入的是数字'
else
'输入的是其他字符'
end;
dbms_output.put_line(i_result);
end;

注意:在提示窗口中输入的时候,字符串一定要加单引号,否则就会出错,本人每次在这里都要拌一下。  

  • SQL语句

  SQL语句就是数据库查询语句,比较简单就不在这里说了。

  • 游标语句

二.异常部分。

  数据库中的异常跟java中的异常的机制和作用原理是一样的,只是代码和格式不一样,数据库中的异常分为三类:系统异常(预定义异常)、自定义异常以及引发应用程序异常。

  •   系统异常
     PL/SQL程序在运行过程中,可能会出现错误或异常现象

     例如:无法建立到Oracle的连接或用0做除数。好的程序应该对可能发生的异常情况进行处理,异常处理代码在EXCEPTION块中实现

     可以使用WHEN语句来定义异常。WHEN语句的使用方法如下:

      EXCEPTION

      WHEN <异常情况名> THEN

      <异常处理代码>

       WHEN <异常情况名> THEN

       <异常处理代码>

        ...

       WHEN OTHERS THEN

      <异常处理代码>

    常见的系统异常


 异常名称  异常码 说明 
 NO_DATA_FOUND  ORA-01403 select into语句中没有返回任何记录 
 TOO_MANY_ROWS ORA-01422  select into语句中返回多行数据。 
 ZERO_DIVDE  ORA-01476 试图用0作为除数。 
 DUP_VAL_ON_INDEX  ORA-00001 试图向唯一索引列插入重复值 
 INVALID_CURSOR ORA-01001  试图进行非法游标操作。 
 CURSOR_ALREADY_OPEN ORA-06511  试图打开一个已经打开的游标。 
 INVALID_NUMBER ORA-01722  试图将数字转换为字符串。 
 VALUE_ERROR  

在产生大小限制错误时出现。如,变量中的列值超出变量的大小

LOGIN_DENIED

   输入的用户名或者密码无效时出现。

  • 自定义异常  

      当与一个异常错误相关的错误出现时,就会隐含触发该异常错误。用户定义的异常错误是通过显式使用 RAISE 语句来触发。当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码。

      对于这类异常情况的处理,步骤如下:

      在PL/SQL 块的定义部分定义异常情况:

      <异常名称>  exception;

      在PL/SQL 块的执行部分RAISE异常:

      RAISE <异常名称>;

      在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。

      WHEN <异常名称> THEN

        代码...

  • 引发应用程序异常

Oracle中PL/SQL的执行部分和各种流程控制的更多相关文章

  1. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  2. 使用oracle 的 PL/Sql 定时执行一个存储过程

    CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...

  3. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  4. Oracle中PL/SQL 范例

    1.写匿名块,输入三角形三个表的长度.在控制台打印三角形的面积 declare v_side_first ):=&第一条边; v_side_second ):=&第二条边; v_sid ...

  5. oracle中pl/sql 练习题----输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

    一. 思路:声明record类型的变量,根据 多表联合查询查出想要的数据,最后输出. 二.注意:record类型不一定只是一个表中的数据,也可以声明不同表中的数据类型. 三.语句如下: declare ...

  6. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  7. oracle中动态SQL使用详细介绍

    Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下     1.静态SQLSQL与动态SQL Oracle编译PL ...

  8. (转)Oracle中动态SQL详解

    本文转载自:http://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html 1.静态SQLSQL与动态SQL Oracle编译PL ...

  9. [转载]Oracle中动态SQL详解

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

随机推荐

  1. Revolving Digits(hdu 4333)

    题意:就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数字中,比原数字小的,相等的,大的分别有多少个.比如341-->134-->413-->3 ...

  2. CSS常用知识点

    块级元素:width宽和height高有效. 内联元素:width宽和height高无效. 1.float:该属性的值指出了对象是否及如何浮动. none:设置对象不浮动left:设置对象浮在左边ri ...

  3. 以前用SQL实现的机构职能树,再看看

    DECLARE CNT NUMBER; TMP ); vtmp ); ltmp1 ); ltmp2 ); ltmp3 ); ltmp4 ); NTMP NUMBER; CURSOR CSR_TEST ...

  4. 【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】

    一.JQuery中的DOM操作. 什么是DOM:DOM是一中和浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件.DOM简称文档对象模型,是Document Oject Mode ...

  5. PHP "万能"输出随机字符串

    <?php function getRandomCode ($length = 32, $mode = 0){ switch ($mode) { case "1": $str ...

  6. /var/run/yum.pid 已被锁定,PID 为 XXXX 的另一个程序正在运行。

    安装st-load时, 终端提示 “/var/run/yum.pid 已被锁定,PID 为 13908 的另一个程序正在运行.” 解决方法:直接在终端运行 rm -f /var/run/yum.pid ...

  7. Microchip微芯HCS301解密HCS360解密HCS361芯片解密多少钱?

    Microchip微芯HCS系列芯片解密型号: HCS101 | HCS200 | HCS201 | HCS201T | HCS300 | HCS300T HCS301 | HCS301T | HCS ...

  8. Daily Scrum Meeting ——SecondDay

    一.Daily Scrum Meeting照片 二.Burndown Chart 燃尽图是的粒度较大,今天并没完成具体的issues 三.项目进展 1.完成侧滑框,测试功能中 放张图 2.M层,编写参 ...

  9. VR寒冬AR暖春,以色列AR公司再获3000万美元融资

    据统计,2015年国内至少有近70家VR公司获得天使或者A轮投资,不过狂欢并没有持续太久.2016年即将结束,资本寒冬和VR头盔的出货远不如预期,让投资者放慢了步伐,不过AR领域的热度依然不减.近日, ...

  10. 【JAVA】JDK -Calendar 遇到的 一个坑

    Calendar是JDK 1.1增加的类 最近使用了下Calendar发现几个很让人抓狂的问题 源码: public final static int SUNDAY = 1; public final ...