版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u011685627/article/details/26299399

1    For循环
    语法:begin
            for i in reverse 1..10 loop
            insert into users values(i,’奥巴马‘)。
            end loop;
          end;
    注意:循环变量 i 是隐含添加的。所以无法看到
    
2    goto语句
    goto 语句用于跳转到特定的位置去运行语句。因为goto语句会降低程序的可读性,所以普通情况下
    不建议使用goto语句
    
3    null语句
    null语句不会运行不论什么操作,可是能够添加程序的可读性
    
4    创建返回值是一个结果集的存储过程
    (1) 创建一个包:
        SQL> create or replace package testpackage as
             type test test_cursor is ref cursor;
             end testpackage;
            
    (2) 创建存储过程
        SQL> create or replace procedure sp_procedure1
             (stuNo in number, param_cursor out testpackage.test_cursor) is
             begin
                open param_cursor for select * from emp where sutno=stuNo;
             end;
    
5    分页
    (1) sql语句
        select * from
        (select *,rownum NO from
        (select * from emp) where rownum <=20) where rownum >=10;
        
    (2)    创建一个包
        create or replace package testpackage2 as
             type test test_cursor is ref cursor;
             end testpackage2;
            
    (3)    创建存储过程
        SQL> create or replace procedure procedureName2
            (tableName in varchar2,                    -- 表名
            pageSize in number,                        -- 每页显示的记录数
            pageNow in number,                        -- 当前是第几页
            pageCount out number,                    -- 总页数
            p_cursor out testpackage2.test_cursor) is
            v_sql varchar2(1000);
            v_beginNum number := (pageNow -1)* pageSize + 1;
            v_endNum number := pageNow * pageSize;
            begin
                v_sql := 'select * from (select *,rownum NO from (select * from '|| tableName ||')

                where rownum <= '|| v_endNum ||') where rownum >= '|| v_beginNum;
                open p_cursor for v_sql;
                -- 创建一个sql语句
                v_sql := 'select count(*) from ' || tableName;
                -- 运行sql语句,将结果保存
                execute immediate v_sql into rows。
                if mod(rows,pageSize) = 0
                then pageCount := rows / pageSize;
                else
                pageCount := rows / pageSize + 1;
                end if;
                -- 关闭游标
                close p_cursor;
            end;
    
6    异常处理
    (1) 提前定义异常
    (2) 非提前定义异常
    (3) 自己定义异常
    
    例1
    SQL> declare v_name emp.ename%type;
         begin
         select ename into v_name from emp where empno = &no;
         dbms_output.put_line('名字:' || v_name);
         exception
            when no_data_found
            then dbms_output.put_line('编号没有!

');
         end;
        
    提前定义异常
    a case_not_found
      在编写case 语句时。假设在when子句中没有包括必须的条件分支(没有符合条件的)。就会触发case_not_found异常
    b cursor_already_open
      当又一次打开已经打开的游标时触发此异常
    c dup_val_on_index
      在唯一索引所相应的列上插入反复值时触发此异常
    d invalid_cursor
      当试图在不合法的游标上进行操作时触发此异常    
    e invalid_number
      当输入的数字无效时触发此异常
    f too_many_rows
      当返回值不止是一条记录时触发此异常
    g zero_divide
      当进行 x/0,即除数为零的操作时触发此异常
    h value_error
      当进行赋值操作时,假设变量的长度不足以存储实际数据时触发此异常
    i login——denide
      当用户非法登录时会触发此异常
    j not_logged_on
      假设用户没有登录就运行DML操作,就会触发此异常
    k storage_error
      假设超出了内存空间,就会触发此异常
    l timeout_on_resource
      当Oracle等待资源时。假设发生超时情况,就会触发此异常

    自己定义异常
    SQL> create or replace procedure procedureName2(sp_empNo number) is
         MyExpception Exceptiom;        -- 自己定义一个异常
         begin
         update emp set sal = sal * 1.2 where empno = &no;
         if sql%notfound then
            raise MyExpception;            -- 触发自己定义异常
         end if;
         exception
            when no_data_found
            then dbms_output.put_line('没有更新数据!

');
         end;

    
    
    
    
    
   

PL/SQL 编程(二)的更多相关文章

  1. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

  2. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  3. pl/sql编程

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  4. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  5. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  6. [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

    原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...

  7. [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

    原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...

  8. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

  9. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

随机推荐

  1. java并发编程(3)避免活跃性危险

    活跃性危险 一.死锁 发生:每个人都不愿意放弃自己的锁,确想要别人的锁,这就会导致死锁  1.锁顺序死锁:如果每个线程以固定的顺序获取锁,那么至少在程序中不会出现锁顺序导致的死锁: 因为顺序固定如:所 ...

  2. Swift函数_inout参数

    //无inout参数的函数 func changeName(var name:String){ name = "Hello" println(name) } let payerNa ...

  3. A space or line break was encountered after the "@" character. Only valid identifiers, keywords, comments, "(" and "{" are valid at the start of a code block and they must occur immediately following

    mvc 控制器调用分布视图出错,("A space or line break was encountered after the "@" character. Only ...

  4. webservice随记

    WebService:跨平台.系统.跨语言间相互调用 CXF:Axis(Apache)-> Axis2(Apache)XFire -> CXF(Celtrix + XFire)(Apach ...

  5. Charles破解(转)

    NB的Charles是一款付费软件.但…本文将讲解如何破解Charles.注:虽然与文章内容相悖,但还是希望大家能购买正版软件,毕竟都是做软件开发的,何必自断生路,要有版权意识. 环境信息: Mac ...

  6. 冒泡排序——Python实现

    一.排序思想 排序思想参见:https://www.cnblogs.com/luomeng/p/10161794.html 二.python实现 def bubble_sort(nums): &quo ...

  7. CSS3之 :nth-child(n)语法讲解

    语法: E:nth-child(n){ sRules } * 匹配父元素索引为n的子元素E :nth-child(n) 让你匹配到父元素的任一子元素: Figure 1:<section id= ...

  8. 第11章 Media Queries 与Responsive 设计

    Media Queries--媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...

  9. 关于div设置display: inline-block之后盒子之间间距的处理

    当两个盒子都设置display: inline-block之后并且css也清除了默认样式 这时候会发现div盒子之间仍然存在间隙 将font-size清0间距就会取消

  10. Grunt实例

    module.exports = function(grunt) { // 项目配置 grunt.initConfig({ pkg: grunt.file.readJSON('package.json ...