`
1140566087
  • 浏览: 548064 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18087
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309662
Group-logo
J2ME 基础学习课程集
浏览量:18020
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17203
社区版块
存档分类
最新评论

PL/SQL 中的异常 及PL/SQL中的控制语句

阅读更多
[/color][color=orange]SQL> set serveroutput on
SQL> remark 控制语句
SQL> remark 异常处理

SQL> REMARK ..........................................................
SQL> REMARK IF...THEN 的判断语法
SQL> remark IF 条件标示式 WHEN 执行语句 END IF;  示例如下:
SQL> REMARK 使用分组函数 条件判断的按列

SQL> EDIT
Wrote file afiedt.buf

  1  DECLARE
  2  SUMSAL SCOTT.EMP.SAL%TYPE;
  3  BEGIN
  4  SELECT SUM(SAL) INTO SUMSAL FROM SCOTT.EMP GROUP BY DEPTNO HAVING DEPTNO=30;
  5  IF SUMSAL>5000 THEN
  6  DBMS_OUTPUT.PUT_LINE('部门30的工资总额已经超过了预算,供'||SUMSAL);
  7  END IF;
  8* END;
SQL> /
部门30的工资总额已经超过了预算,供9400                                         

PL/SQL procedure successfully completed.

SQL> REMARK 如果存在了分支条件,使用 IF...ELSIF..ELSE...END IF;
SQL> REMARK 多元分支条件控制case
SQL> REMARK 连接scott账户
SQL> conn scott/tiger;
Connected.
SQL> DECLARE
  2  THESAL EMP.SAL%TYPE;
  3  BEGIN
  4  SELECT SAL INTO THESAL FROM EMP WHERE EMPNO=7369;
  5  CASE
  6  WHEN THESAL<1000 THEN
  7  DBMS_OUTPUT.PUT_LINE('低工资');
  8  WHEN THESAL>=1000 THEN
  9  DBMS_OUTPUT.PUT_LINE('一般工资');
10  ELSE
11  DBMS_OUTPUT.PUT_LINE('高工资');
12  END CASE;
13  END;
14  /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON;
SQL> REMARK 循环控制loop和end loop ; 之间的语句将无限次的执行,如果要跳出则使用exit;
SQL> remark 语法:loop exit when 条件表达式;执行语句 ; end loop;
SQL> remark 案例:累加的例子
SQL> declare
  2  cou int default 10;
  3  result int :=0;
  4  begin
  5  DBMS_OUTPUT.PUT_LINE('循环开始.....');
  6  LOOP
  7  EXIT WHEN COU>20;
  8  result :=result + cou;
  9 
10  DBMS_OUTPUT.PUT_LINE('进入循环..'||cou||'结果是:'||result);
11  cou :=cou+1;
12  end loop;
13  dbms_output.put_line('最后的结果是:'||result);
14  end;
15  /
循环开始.....                                                                  
进入循环..10结果是:10                                                         
进入循环..11结果是:21                                                         
进入循环..12结果是:33                                                         
进入循环..13结果是:46                                                         
进入循环..14结果是:60                                                         
进入循环..15结果是:75                                                         
进入循环..16结果是:91                                                         
进入循环..17结果是:108                                                        
进入循环..18结果是:126                                                        
进入循环..19结果是:145                                                        
进入循环..20结果是:165                                                        
最后的结果是:165                                                              

PL/SQL procedure successfully completed.

SQL> remark 循环控制还可以使用for 循环和while 进行循环,这两种循环都是以loop循环作为基础
SQL> remark 语法:for 变量 in 起始值..结束值 loop 执行语句;  end loop;
SQL> remark 注:for循环的语法控制中,变量的定义不用声明,变量的边界值都会进入循环;.......

案例:
SQL> declare
  2  result int :=0;
  3  begin
  4  dbms_output.put_line('循环开始...');
  5  for cou in 10..20
  6  loop
  7  result :=result+cou;
  8  dbms_output.put_line('进入循环..'||cou||'结果是:'||result);
  9  end loop;
10  dbms_output.put_line('循环结束:'||result);
11  end;
12  /
循环开始...                                                                    
进入循环..10结果是:10                                                         
进入循环..11结果是:21                                                         
进入循环..12结果是:33                                                         
进入循环..13结果是:46                                                         
进入循环..14结果是:60                                                         
进入循环..15结果是:75                                                         
进入循环..16结果是:91                                                         
进入循环..17结果是:108                                                        
进入循环..18结果是:126                                                        
进入循环..19结果是:145                                                        
进入循环..20结果是:165                                                        
循环结束:165                                                                  

PL/SQL procedure successfully completed.

SQL> remark while 的循环用法
SQL> remark 语法:while 条件表达式 loop 执行语句; end loop;
SQL> remark ................................................................
SQL> remark 跳转控制:标示跳转的指令是 goto
SQL> remark 语法:执行语句 <<节名称>> 执行语句;
SQL> remark 如果只希望 节 作为一个跳转的点,并不执行任何语句,可以使用null,使用return 结束

程序
SQL> remark 跳转的案例:
SQL> declare
  2  sumsal emp.sal%type;
  3  begin
  4  select sum(sal) into sumsal from emp where deptno=30;
  5  if sumsal>2000 then
  6  goto first;
  7  elsif sumsal>3000 then
  8  goto second;
  9  else
10  goto third;
11  end if;
12 
13  <<first>>
14  dbms_output.put_line('first'||sumsal);
15  return;
16  <<second>>
17  dbms_output.put_line('second'||sumsal);
18  return;
19  <<third>>
20  null;
21  end;
22  /
first9400                                                                      

PL/SQL procedure successfully completed.

SQL> remark ................................................................
SQL> remark 记录:PS记录只有一行,但是由多列,有点类型于程序中的结构
SQL> remark 记录的定义:type <类型名> is record <列名 1 类型 1,....列名n 类型n,>
SQL> remark 案例:
SQL> edit;
Wrote file afiedt.buf

  1  declare
  2  type empsub is record (myeno emp.empno%type,myename emp.ename%type,mysa emp.sal

%type);
  3  mycord empsub;
  4  begin
  5  select empno,ename,sal into mycord from emp where empno = 7369;
  6  dbms_output.put_line('编号1:'||mycord.myeno);
  7* end;
SQL> /
编号1:7369                                                                    

PL/SQL procedure successfully completed.

SQL> remark empsub 定义了一种数据类型
SQL> remark..................................................................
SQL> remark 异常:一种为内部异常,一种为用户自定义异常;
SQL> remark PS中要捕获异常,必须使用系统所给的异常名称,而不是异常的编号;
SQL> declare
  2  newsal emp.sal%type;
  3  begin
  4  select sal into newsal from emp where deptno = 30;
  5  dbms_output.put_line('工资是:'||newsal);
  6  exception
  7  when too_many_rows then
  8  dbms_output.put_line('数据插入记录太多');
  9  end;
10  /
数据插入记录太多                                                               

PL/SQL procedure successfully completed.

SQL> remark 自定义异常
SQL> remark declare 异常名 exception; ----声明异常
SQL> remark raise 异常名;   --抛出异常
SQL> remark exception when 异常名 then 。....-- 捕获异常 并进行相关的处理
SQL> remark RAISE_APPLICATION_ERROR(错误编码,错误消息);
SQL> remark 错误编码:用户为抛出异常指定的编号,-20000和-20999之间
SQL> remark 错误消息:是用户定义的错误的消息,消息的长度是2048;
SQL> declare
  2  thesal emp.sal%type;
  3  begin
  4  select sal into thesal from emp where empno=7369;
  5  if thesal>2000 then
  6  raise_application_error(-20001,'工资不再调整的范围');
  7  end if;
  8  end;
  9  /

PL/SQL procedure successfully completed.

SQL> remark ................................................................
SQL> remark 动态SQL ,动态的构造一个查询语句;语法:
SQL> remark execute immediate 'SQL语句字符串';
SQL> remark 创建一个表:
SQL> begin
  2  execute immediate
  3  'create table hopecalss(claid number,calName char(6))';
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> remark 动态的SQL进行参数的传递  有时候进行结果的变量;
SQL> edit
Wrote file afiedt.buf

  1  declare
  2  sqlstring varchar2(200);
  3  dept_id number(2):=50;
  4  dept_name varchar(14):='personnel';
  5  location varchar(13):='develop';
  6  begin
  7  --演示的是usingredients字句的execute immediate
  8  sqlstring :='insert into dept values(:1,:2,:3)';
  9  execute immediate sqlstring using dept_id,dept_name,location;
10* end;
11  /

PL/SQL procedure successfully completed.

SQL> spool off;
[color=orange][/color][size=x-small][/size]
0
0
分享到:
评论

相关推荐

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    基本SQL语句及PL/SQL语句

    SQL基本语句和PL/SQL语句,很多实例,让你一目了然

    Oracle PL/SQL语言初级教程

    PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及...

    PL/SQL免安装版

    在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL免安装版,点击即用,非常方便!

    PL/SQL Developer 客户端

    在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 ...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序...

    PL/SqlDeveloper汉化版

    它寄托于传统的 SQL 语句,同时又在功能上做了不少的扩充。PL/SQL 有着太多的优势,甚至让SQL 在它面前也黯然失色。 PL/SQL Developer 这款数据库开发环境的功能十分全面,大大缩短了程序员的开发周期。强大的 PL/...

    PL/SQL编程基础知识

    PL/SQL 编程基础知识详解,PL/SQL 包含过程化语句和SQL语句数据操作和查询语句被包含在PL/SQL代码的程序单元中(PL/SQL块),经过逻辑判断、循环等操作完成复杂的功能或者计算.。

    PL/SQL课件

    PL/SQL中的SQL语句(第3章) 控制结构(第4~7章) 异常处理(第8~10章) 游标(第11~12章) 触发器(第13~14章) 复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包(第19~22章) Oracle中...

    PL/SQL Developer 6.05注册版-1

    更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL...

    PL/SQL美化器规则文件,用于格式美化sql语句

    PL/SQL使用方法: 1、工具--首选项--用户界面--PL/SQL美化器--规则文件,选择.br的规则文件,点确定按钮。 2、点击工具栏的“PL/SQL美化器”,会自动把一段SQL语句重新排版美化。

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    PL/SQL Developer v8.0.zip

    更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL ...

    PL/SQL Developer 9.0.4.1644 绿色中文版_带注册机

    PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要优势。 PL/SQL Developer 是一个为 Oracle 数据库开发存储程序单元的集成开发环境(IDE) ,使用PL/SQL Developer,你能...

    PL/SQL Developer 7.1.5 注册版-3

    更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL...

    PL/SQL 6.0 汉化版

    对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    Oracle_PLSQL语言基础

    PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL...

    PL/SQL 创库语句

    PL/SQL 创库语句PL/SQL 创库语句PL/SQL 创库语句

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序...

Global site tag (gtag.js) - Google Analytics