PL/SQL - 03

使用嵌套块

在PL/SQL块中可以嵌套子块,嵌套的块既可以放在外部块的执行部分,也可以放在异常处理部分,但是不能放在外部块声明部分
内部嵌套块可以访问外部嵌套块声明的变量,但是外部声明块不能访问内部声明块中的变量

declare
v_deptno number(2) := 50 ;
v_dname varchar2(12) ;

begin
       begin
       select dname  into v_dname from scott.dept where deptno = v_deptno ;
       dbms_output.put_line(‘您好查找的部门是: ‘|| v_dname);
       end ;
declare
  v_loc varchar2(10) := ‘深圳南山‘;
  begin
  update SCOTT.DEPT set loc = v_loc where deptno = v_deptno ;
    dbms_output.put_line(‘在内嵌块中成功更新部门资料! ‘);
  end ;
exception when no_data_found
         then begin
         insert into scott.dept values(v_deptno,‘信息部‘,‘深圳‘) ;
         dbms_output.put_line(‘在异常处理模块成功恢复资料!‘);
exception when others
         then
         dbms_output.put_line(‘未知异常!‘);
         end;
end;

此段程序共有三个begin--end结构。
第一组begin-end 结构是引导整个程序块,所以是主结构;
第二个 是用来查询部门信息的
       begin
       select dname  into v_dname from scott.dept where deptno = v_deptno ;
       dbms_output.put_line(‘您好查找的部门是: ‘|| v_dname);
       end ;
其实这个begin-end 结构可以去掉,并不影响程序执行

第三个是用来更新部门信息的 ,其完整代码如下

declare
  v_loc varchar2(10) := ‘深圳南山‘;
  begin
  update SCOTT.DEPT set loc = v_loc where deptno = v_deptno ;
    dbms_output.put_line(‘在内嵌块中成功更新部门资料! ‘);
  end ;

这里的begin-end 结构是不可以去掉的 ,因为在后续语句执行之前 进行了变量定义,
即:declare
  v_loc varchar2(10) := ‘深圳南山‘;
在一个单一的begin-end结构中是不能再重新定义变量的,除非此时已经决定此变量不属于此begin-end结构,所以这里的begin-end不能删除。

附:使用命名嵌套块

<<外部块>>
declare
v_deptno number(2) := 50 ;
v_dname varchar2(12) ;

begin
       <<查询员工名称块>>
       begin
       select dname  into v_dname from scott.dept where deptno = v_deptno ;
       dbms_output.put_line(‘您好查找的部门是: ‘|| v_dname);
       end ;
 <<更新员工部门块>>
declare
  v_loc varchar2(10) := ‘深圳南山‘;
  begin
  update SCOTT.DEPT set loc = v_loc where deptno = v_deptno ;
    dbms_output.put_line(‘在内嵌块中成功更新部门资料! ‘);
  end ;
exception when no_data_found
         then begin
         insert into scott.dept values(v_deptno,‘信息部‘,‘深圳‘) ;
         dbms_output.put_line(‘在异常处理模块成功恢复资料!‘);
exception when others
         then
         dbms_output.put_line(‘未知异常!‘);
         end;
end;

时间: 2024-10-12 17:27:19

PL/SQL - 03的相关文章

PL/SQL 03 流程控制

--IF语法IF condition THEN  statements;[ELSIF condition THEN  statements;][ELSE  statements;]END IF; --CASE 语法 1.在 CASE 语句中使用单一选择符进行等值比较 CASE selector  WHEN expression1 THEN sequence_of_statements1;  WHEN expression2 THEN sequence_of_statements2;  ... 

使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 开启服务 2 配置监听 找到下面文件: 记事本打开 在导航器的下拉菜单中选择:将数据库添加到树, 然后点击确定 然后使用PL/SQL就可以登录了: 3 建立新表空间和新用户 使用system用户登录:执行如下sql语句建立表空间和新用户,以及给用户授权 建立表空间 Create tablespace myyyjc datafile 'D:\app\Administra

PL/SQL和Oracle对象

PL/SQL -一.变量 01)引用变量 -- 查询并打印7839的姓名和薪水 declare    --定义变量保存姓名和薪水    --pename varchar2(20);    --psal   number;    pename emp.ename%type;    psal   emp.sal%type; begin   -- 得到1234的姓名和薪水   select ename,sal into pename,psal from emp where empno=1234;   

PL/SQL 总结

一..基本语法 PL/SQL的结构块如下: declare --声明变量.类型.游标 begin --程序执行的部分,类似main方法 exception --针对异常,提供如何处理的机制 --when ....then.... end; 注意,没有用的部分,就 不需要写,比如程序的确是没有异常要处理,那么exception就不写 建议的命名方法: 标识符  命名规则 例子 程序变量  V_name V_name 程序常量  C_Name C_company_name 游标变量        

Oracle PL/SQL随堂笔记总结

1.pl/sql编程 1.理解oracle的pl/sql的概念    2.掌握pl/sql编程技术(过程.函数.触发器)    pl/sql是标准sql语句的扩展    简介        1.过程.函数.触发器都是由pl/sql编写        2.过程.函数.触发器是在oracle中        3.pl/sql是非常强大的过程语言        4.过程.函数等可以在java程序被调用    学习必要性:        1.提高应用程序的性能        2.模块化的设计思想    

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

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

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

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

Oracle 11g 的PL/SQL函数结果缓存

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数. C:\Documents and Settings\guogang>sqlplus gg_test/[email protected]_gg SQL*Plus: Release 10.2.0.1.0

PL/SQL——编程——变量定义

1.变量标量类型(scalar)复合类型(composite)参照类型(reference)lob(large object) --定义一个变长字符串v_ename VARCHAR2(10)--定义一个小数,范围-9999.99~9999.99v_sal NUMBER(6,2)--定义一个小数,并给初始值5.4,:=是plsql的赋值符v_sal2 NUMBER(6,2):=5.4--定义一个日期类型v_hiredate date--定义一个布尔量,不能为空,初始值为falsev_valid B