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

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最新中文手册

    8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...

    oracle10g_pl/sql

    - **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    基本SQL语句及PL/SQL语句

    标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...

    Oracle PL/SQL实战(待续)

    在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务逻辑。例如,`IF...THEN...ELSIF...ELSE`语句用于实现条件分支,`WHILE`和`FOR`循环则可以处理...

    pl/sql developer11.0

    7. **性能优化**:提供性能分析工具,如执行计划分析、SQL Tuning Advisor等,帮助优化SQL语句,提高数据库运行效率。 8. **版本控制集成**:与其他版本控制系统(如Git、SVN)无缝集成,便于版本管理和代码协同。 ...

    PL/SQL中文包

    2. **函数**:函数与存储过程类似,但它们必须返回一个值,可以被其他SQL语句或PL/SQL代码调用。 3. **触发器**:触发器是数据库事件(如INSERT、UPDATE或DELETE操作)自动触发的PL/SQL代码,可以用来实现数据完整...

    PL/SQL 基本知识

    执行部分是程序的主要逻辑,包含SQL语句和PL/SQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 在实际应用中,PL/SQL的存储过程和函数是常见的使用场景。存储过程是一组预编译的PL/SQL语句,可以被多...

    ORACLE PL/SQL从入门到精通

    过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...

    oracle 9i pl/sql程序设计笔记

    通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **SQL语句的执行**:介绍如何在PL/SQL代码中嵌入SQL语句,包括查询、插入、更新和删除操作。 - **动态SQL**:探讨如何构造和执行动态SQL语句,这对于需要根据运行时条件生成SQL的情况非常有用。 - **SQL*Plus命令*...

    oracle pl/sql从入门到精通 配套源代码

    在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询数据,INSERT、UPDATE和DELETE用于修改数据。PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持...

    PL/SQL编程基础知识

    在PL/SQL环境中可以使用的SQL语句主要包括以下几种: - **INSERT**:用于向表中插入新记录。 - **UPDATE**:用于更新现有记录。 - **DELETE**:用于删除表中的记录。 - **SELECT INTO**:用于从表中选取数据,并将...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    执行部分包含了SQL语句和流程控制结构,如循环、条件判断等;异常处理部分则用于捕获和处理运行时错误。 2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、...

    PL/SQL中文帮助手册

    3. **流程控制**:PL/SQL提供了一系列流程控制结构,包括IF...THEN...ELSIF...ELSE语句、CASE语句、FOR循环、WHILE循环等,用于根据条件或循环执行代码。 4. **子程序**:包括函数和过程。函数返回一个值,而过程不...

    PL/SQL下载

    5. **动态SQL**:允许在运行时构造和执行SQL语句,增强了灵活性。 **PL/SQL Developer** PL/SQL Developer是一款专为Oracle数据库开发设计的集成开发环境(IDE),它的主要功能包括: 1. **源代码编辑器**:提供...

    PL/SQL入门到精通书的源代码

    5. **过程与函数**:过程是一组PL/SQL语句的集合,用于执行特定任务。函数与过程类似,但返回一个值。它们可以提高代码的复用性和模块化。 6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获...

    PL/SQL doc 文件

    * 执行部分(Executable section):是 PL/SQL 块中的指令部分,由关键字 BEGIN 开始,所有的可执行语句都放在这一部分。 * 异常处理部分(Exception section):是可选的,在这一部分中处理异常或错误。 PL/SQL 块...

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

    5. **存储过程和函数**:存储过程是一组预编译的SQL语句,可以接收参数,返回结果。函数与之类似,但必须返回一个值。 6. **触发器**:触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    PL/SQL开发文档1

    2. SQL*Plus是Oracle提供的一个命令行工具,允许用户执行SQL语句和PL/SQL代码块,并获取查询结果。 3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中...

Global site tag (gtag.js) - Google Analytics