DECLARE  
  V_SQL_DROP_TABLE   VARCHAR2(50) := 'DROP TABLE MY_TEST2';  
  V_SQL_CREATE_TABLE VARCHAR2(100) := 'CREATE TABLE MY_TEST2(NOT_NULL VARCHAR2(20) NOT NULL, ONLY_INT INTEGER)';  
BEGIN  
  EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 创建测试表  
EXCEPTION  
  -- 如果表已存在,则会引发异常  
  WHEN OTHERS THEN  
    EXECUTE IMMEDIATE V_SQL_DROP_TABLE; -- 先删除  
    EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 再创建  
END;  
/  
--2.用我们刚创建的测试表进行测试  
DECLARE   
  V_COUNT INTEGER; -- 表中记录的行数  
  V_INT_VAL MY_TEST.ONLY_INT%TYPE; -- 使用%TYPE关键字参照某表某字段类型声明变量  
BEGIN  
  V_INT_VAL := 123456;  
  -- 插入一条正确的数据  
  INSERT INTO MY_TEST2 VALUES ('TEST_SUCCESS', V_INT_VAL);  
  -- 查询条数为1条,我们发现插入成功了  
  SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;  
  DBMS_OUTPUT.put_line('MY_TEST表中有' || V_COUNT || '条记录');  
 
  -- 插入一条错误的数据,因为第二个字段为int型,插入字符数据肯定会出错  
 /* INSERT INTO MY_TEST VALUES ('TEST_FAIL', 'ABC');  */
 
  -- 最后提交更改  
  COMMIT;  
EXCEPTION  
  -- 异常处理  
  WHEN OTHERS THEN  
    ROLLBACK; -- 异常时回滚,这样第一次插入的正确数据也不会保存到数据库  
    DBMS_OUTPUT.put_line('[PL/SQL 事务]中出现异常,错误代码:ORA' || sqlcode);  
    -- 我们验证一下表里的数据为0条  
    SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;  
    DBMS_OUTPUT.put_line('回滚后,MY_TEST表中有' || V_COUNT || '条记录');  
END; -- 可执行语句结束  
/ -- 该符号表示执行这段PL/SQL代码

oracle执行多个pl/sql块的更多相关文章

  1. pl/sql基础知识—pl/sql块介绍

    n  介绍 块(block)是pl/sql的基本成型单元,编写pl/sql程序实际上就是编写pl/sql块.要完成相对简单的应用功能,可能只需要编写一个pl/sql块:但是如果要想实现复杂的功能,可能 ...

  2. Oracle PL/SQL块

    PL/SQL块 简介 :PL/SQL是 Procedure Language & Structured Query Language 的缩写,是ORACLE公司对标准数据库语言的扩展 PL/S ...

  3. 九、dbms_ddl(提供了在PL/SQL块中执行DDL语句的方法)

    1.概述 作用:提供了在PL/SQL块中执行DDL语句的方法,并且也提供了一些DDL的特殊管理方法. 2.包的组成 1).alter_compile说明:用于重新编译过程.函数和包语法:dbms_dd ...

  4. oracle中plsql练习题-----编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号

    一.思路:首先输出需要变量接收,需要声明变量,于是考虑什么变量类型比较合适,在这我用的是table类型,最后,查询出来,循环输出即可. 二.具体实现 -- 编写一个PL/SQL块,输出所有员工的员工姓 ...

  5. oracle 10g 学习之PL/SQL简介和简单使用(10)

    PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...

  6. Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

  7. Oracle学习DaySix(PL/SQL续)

    一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...

  8. Oracle学习DayFive(PL/SQL)

    一.PL/SQL简介  PL/SQL 是 Procedure Language & Structured Query Language 的缩写.PL/SQL 是对 SQL 语言存储过程语言的扩 ...

  9. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

随机推荐

  1. Mysql-两表的连接,copy表,select的各种用法

    -- 连接:外连接,内连接 两个表之间 外连接:right join    left join -- left join 左标为主 一般以值少的为主 select * from table1 left ...

  2. 2.1_Scikit-learn数据集

    scikit-learn数据集 我们将介绍sklearn中的数据集类,模块包括用于加载数据集的实用程序,包括加载和获取流行参考数据集的方法.它还具有一些人工数据生成器. sklearn.dataset ...

  3. aix-syslog

    收集网络内路由器的日志信息,同时把本地日志信息与路由器信息分开. /etc/syslog.conf我写成: ## 本地日志处理 *.notice;*.err;*.warn<tab>;< ...

  4. jpa 一对一

    实体   Manager package entity; import javax.persistence.Column; import javax.persistence.Entity; impor ...

  5. 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)

    1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...

  6. sendkeys

    1)为了指定单一键盘字符,必须按字符本身的键.例如,为了表示字母 A,可以用 "A" 作为 string.为了表示多个字符,就必须在字符后面直接加上另一个字符.例如,要表示 A.B ...

  7. vue深入了解组件——自定义事件

    一.事件名 跟组件和prop不同,事件名不存在任何自动化的大小写转换.而是触发的事件名需要完全匹配监听这个事件所用的名称.举个例子,如果重复啊一个camelCase名字的事件: this.$emit( ...

  8. 使用webstorm创建vue项目

    进行vue开发首先需要配置node环境 配置好node环境在命令行中输入node -v npm -v则表示环境配置成功 在webstorm命令行中输入命令 1.安装脚手架 npm install -g ...

  9. python 文件移动

    python实现文件移动: import shutil shutil.move("original_path", "new_folder") # move fi ...

  10. Haskell语言学习笔记(33)Exception, Except, ExceptT

    Exception class (Typeable e, Show e) => Exception e where toException :: e -> SomeException fr ...