`
vipbooks
  • 浏览: 152187 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类

Oracle学习笔记(3) PLSQL程序控制结构

阅读更多
  这是第三章的学习笔记,学习完第二章的编程基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!
   这周六总算是不用加班,可以好好出去玩一下了!
   今天去武大看樱花了,哈哈,不错!   

    编程时使用的工具是PLSQL Developer 7.1.4
 

select * from employee;
select * from dba_tab_cols t where t.table_name='EMPLOYEE';


declare
   n_empno employee.empno%type;
   v_name employee.name%type;
   n_salary employee.salary%type;
   v_temp varchar2(30);
   n_temp number(5) := 1;
   -- 自定义异常
   e_exception exception;

exception_init 是一个编译时指令,用于将一个内部错误与异常的名称关联。
一旦关联成功后,我们就可以通过名称抛出异常并用when处理器捕获错误
   pragma exception_init(e_exception,-66666);
   
begin
   n_empno := &员工编号:;
   select name,salary into v_name,n_salary from employee where empno=n_empno;

if 语句
简单条件判断
   if n_salary < 4000 then
      update employee set salary = n_salary+500 where empno=n_empno;
      dbms_output.put_line(v_name || '的工资增加了500元!');
   else
      dbms_output.put_line(v_name || '的工资大于4000,不用加工资!');
   end if;
   -- 多重条件分支
   if n_salary < 4000 then
      dbms_output.put_line(v_name || '的工资少于4000元!');
   elsif n_salary >= 4000 and n_salary < 5000 then
      dbms_output.put_line(v_name || '的工资在4000~5000元之间!');
   elsif n_salary >= 5000 and n_salary < 6000 then
      dbms_output.put_line(v_name || '的工资在5000~6000元之间!');
   else
      dbms_output.put_line(v_name || '的工资大于6000元!');  
   end if;

case 语句
使用单一选择符进行等值比较
   case n_salary
      when 4200 then
         dbms_output.put_line(v_name || '的工资是4200元!');
      when 3500 then
         dbms_output.put_line(v_name || '的工资是3500元!');
      when 6800 then
         dbms_output.put_line(v_name || '的工资是6800元!');
      else
         dbms_output.put_line(v_name || '的工资是' || n_salary ||'元!');
    end case;
    -- 使用多条件比较
    case
       when n_salary < 4000 then
            dbms_output.put_line(v_name || '的工资少于4000元!');
       when n_salary < 5000 then
            dbms_output.put_line(v_name || '的工资少于5000元!');
       when n_salary < 6000 then
            dbms_output.put_line(v_name || '的工资少于6000元!');  
       else
            dbms_output.put_line(v_name || '的工资大于6000元!');
    end case;

case 表达式
使用单一选择符
    v_temp := case n_salary
                  when 3500 then v_name || '的工资是3500元!'
                  when 4200 then v_name || '的工资是4200元!'
                  when 6800 then v_name || '的工资是6800元!'
              else
                  v_name || '的工资是' || n_salary ||'元!'
              end;
    dbms_output.put_line('v_temp:' || v_temp);
    -- 使用多条件比较
    v_temp := case
                 when n_salary < 4000 then 4000
                 when n_salary < 5000 then 5000
                 when n_salary < 6000 then 6000
                 else
                      n_salary
              end + 500;
     dbms_output.put_line(v_name || '的工资原工资是' || n_salary || ' 调整工资并增加500元奖金后的结算工资是 ' || v_temp);                    
     -- 将case 语句用在SQL语句中
     select case 
            when manager = 1 then '经理'
            else '职员'
            -- 是经理还是职员 表示列的别名,也可以不写,在这里不要打引号
            end 是经理还是职员 into v_temp 
            from employee where empno = n_empno;
     dbms_output.put_line(v_name || '是:' || v_temp);

循环控制
基本循环
     loop
        -- 程序在这里至少会执行一次,注意一定要加上exit when……结束循环的条件,否则程序会进入死循环
        exit when n_temp >= 100;
        n_temp := n_temp + 1;
     end loop;
     dbms_output.put_line('n_temp loop循环100次累加的结果是:' || n_temp);
     -- while 循环
     while n_temp <= 100 loop
        n_temp := n_temp + 1;
     end loop;
     dbms_output.put_line('n_temp while循环100次累加的结果是:' || n_temp);

for 循环
如果指定了reverse 选项,那么每次循环时变量会递减,否则变量会递加,注意循环中用的是两个"."
     for i in reverse 1..100 loop
         dbms_output.put_line('for循环中I的值:' || i);
     end loop;
     -- 嵌套循环和标号(Lable)
     -- 定义一个标号
     <<outer>>
     for i in 1..100 loop
         <<inner>>
         for j in 1..100 loop
             n_temp := i*j;
             -- 如果n_temp=1000 就直接退出外层循环
             exit outer when n_temp = 1000;
             -- 如果n_temp=500 只会退出内层循环
             exit inner when n_temp = 500;
         end loop inner;     
         dbms_output.put_line('内层:' || n_temp);
     end loop outer;
     dbms_output.put_line('外层:' || n_temp);

顺序控制
goto 语句用于跳转到特定标号处去执行语句,一般不建议使用
     for i in 1..100 loop
         if i > 50 then
            goto end_loop;
         end if;
         dbms_output.put_line(i);
     end loop; 
     <<end_loop>>
     dbms_output.put_line('loop 循环了50次提前结束了!' );
     -- NULL 语句,它不会执行任何操作,并且会将控制直接传到下一条语句
     if n_salary > 5000 then
        dbms_output.put_line(v_name || '的工资大于4000');
     else 
        null;
     end if;

异常处理
在要处理抛出的异常的异常处理部分的when子句中引用raise e_exception;
用raise_application_error替代raise ,我们可以将错误消息与异常关联在一起
错误号必须是在-20000到-20999之间的负整数;错误描述的长度不能超过2048字节;
第三个参数为可选参数,如果设置为true,则该错误号被放在先前的错误堆栈中;
如果设置为false(默认值),则会替换先前所有错误
     raise_application_error(-20001,'这里有Application异常!',true);
exception
     -- 系统异常
     when NO_DATA_FOUND then dbms_output.put_line(sqlerrm);
     -- 自定义异常
     /*
        异常名只能在两个地方引用:
        一、在要抛出异常的程序执行部分用RAISE语句引用:如:raise e_exception;
        二、在要处理抛出的异常的异常处理部分的when子句中引用
     */
     when e_exception then dbms_output.put_line('这里是自定义异常:' || sqlerrm);
     /*
        使用异常函数:
        函数sqlcode用于取得Oracle错误号,而sqlerrm则用于取得与之相关的错误消息
     */
     when others then dbms_output.put_line('错误号:' || sqlcode || '   错误消息:' || sqlerrm);
end;
/

分享到:
评论

相关推荐

    oracle plsql编程学习笔记

    ### Oracle PL/SQL编程核心知识点解析 #### 一、创建基本表与操作 在Oracle数据库中,使用PL/SQL进行数据库编程...通过实践以上知识点,开发者能够构建健壮、高效的数据库应用程序,充分利用Oracle数据库的强大功能。

    学习oracle笔记-PLSQL

    3. **强大的数据库过程语言**:PL/SQL提供了丰富的数据类型和控制结构,支持面向对象编程特性,能够满足复杂的数据处理需求。 4. **跨语言调用能力**:编写在Oracle中的过程和函数可以通过Java等其他语言进行调用,...

    PLSQL学习笔记(1-7)

    本“PLSQL学习笔记”将逐步讲解这些概念,通过实例和练习帮助读者巩固理解,进一步提升在Oracle数据库开发中的技能。无论你是初学者还是有经验的开发者,这份笔记都能提供有价值的参考。通过深入学习和实践,你将...

    Oracle SQL & PLSQL学习笔记

    3. DCL(数据控制语言): DCL 用于控制数据库的访问权限。 - GRANT:授权用户访问数据库的特定权限,如 `GRANT SELECT, INSERT ON emp TO user1`。 - REVOKE:撤销已授予的权限,如 `REVOKE SELECT ON emp FROM ...

    Oracle 10g 学习笔记

    │ ORACLE学习笔记(二)oracle的逻辑结构 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - ...

    PLSQL 学习笔记

    这篇学习笔记主要涵盖了PLSQL的基础概念、语法结构以及在实际应用中的重要技巧。 1. PLSQL的基本结构: PLSQL由声明部分、执行部分和异常处理部分组成。声明部分定义变量、常量、游标等;执行部分包括控制流语句,...

    精通oracle 10g plsql 编程-学习笔记

    ### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...

    PLSQL学习笔记

    PL/SQL是Procedural Language/SQL的缩写,由Oracle公司开发,它扩展了SQL的功能,允许开发者编写带有控制结构、异常处理和存储过程的程序块。PL/SQL的程序单元包括过程、函数、包、触发器等,可以用于处理复杂的...

    PLSQL存储过程学习笔记

    通过以上介绍,我们可以看到PL/SQL不仅提供了强大的SQL数据处理功能,还结合了传统编程语言的过程控制结构,使得开发者可以在数据库环境中实现复杂的业务逻辑。无论是简单的数据查询还是复杂的事务处理,PL/SQL都能...

    oracle笔记二--plsql 编程.txt

    **标题**: oracle笔记二--plsql 编程 **描述**: oracleoracleoracleoracleoracleoracleoracleoracle(推测为占位符文本,无实际意义) **标签**: oracle **部分内容**: 在部分内容中提到了关于Oracle 10g的安装与...

    Oracle9i PLSQL 入门到精通读书笔记

    通过阅读“Oracle9i PLSQL 入门到精通”这本书,读者可以系统地学习如何使用PLSQL进行数据库编程,从简单的数据操作到复杂的业务逻辑实现,逐步提升为数据库专家。书中的实例和实践项目将帮助读者巩固理论知识,提高...

    sql和plsql学习笔记

    SQL(Structured Query Language)是用于管理和操作关系数据库的标准语言,而...随着经验的积累,开发者可以深入学习高级特性和最佳实践,如性能优化、并发控制、数据库设计等,以提升在Oracle数据库环境下的开发能力。

    oracle经典笔记

    《Oracle经典笔记》是一份深度探讨Oracle数据库管理系统的综合学习资料。这份笔记涵盖了从Oracle PL/SQL编程到SQL查询语言的广泛主题,旨在帮助读者深入理解Oracle数据库的运作机制和应用技巧。 首先,我们来看看...

    韩顺平oracle视频笔记

    PL/SQL 的进阶——控制结构(分支、循环、控制) - **IF语句**:根据条件执行不同的代码块。 - **CASE语句**:根据表达式的值选择执行的代码块。 - **LOOP语句**:重复执行一段代码直到满足特定条件。 - **FOR循环**...

    oracle学习笔记

    Oracle学习笔记是一个面向初学者的资源集合,旨在帮助读者快速入门Oracle数据库系统。Oracle是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据重要地位。这份笔记涵盖了Oracle的基础知识,对于...

    PlSql----甲骨文学习笔记

    PlSql学习笔记 Oracle_PL/SQL是甲骨文数据库管理系统中的一种编程语言,用于创建存储过程、函数、触发器和包等。下面是PlSql学习笔记的详细知识点: 一、创建表 在PlSql中,创建表是最基本的操作。创建表的基本...

    Java3相关课程系列笔记之三PLSQL学习笔记.doc

    PL/SQL是Oracle数据库的一种过程化语言,它将SQL语句与控制结构相结合,为数据库应用程序提供了强大的编程能力。PL/SQL不仅支持数据查询和更新,还能执行复杂的业务逻辑和事务处理。 1.1 什么是PL/SQL PL/SQL由三...

Global site tag (gtag.js) - Google Analytics