您好,欢迎访问一九零五行业门户网

Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现

虽然之前写了不少oracle上的sql语句,但是没有抽出时间对oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与
虽然之前写了不少oracle上的sql语句,但是没有抽出时间对oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与理解,在实践中就不能举一反三,就不能写出高规范高质量的sql语句。
-- pl/sql 基本写法
-- 说明:声明、异常处理部分为可选,视具体程序而定
-- 博客记录点滴  转载注明出处
declare -- 声明变量
  a integer;-- 只声明
  b float := 0;-- 带赋值的声明
  c float;
begin -- 可执行语句开始
  dbms_output.put_line('开始执行可执行语句块![转载注明出处]');
  a := 1.5;
  dbms_output.put_line('a=' || a);
  dbms_output.put_line('b=' || b);
  c := a / b; -- 会引发分母为0的异常,下面的两条输出语句将无法执行
  dbms_output.put_line('c=' || c);
  dbms_output.put_line('可执行语句块执行完毕![转载注明出处]');
exception -- 异常处理
  when others then
    dbms_output.put_line('[pl/sql 基本写法]中出现异常,错误代码:ora'||sqlcode);
end; -- 可执行语句结束
/ -- 该符号表示执行这段pl/sql代码
执行后的输出:
开始执行可执行语句块![转载注明出处]
a=2
b=0
[pl/sql 基本写法]中出现异常,,错误代码:ora-1476
我们再看一下如何通过异常处理实现数据库事务:
-- pl/sql 事务
-- 说明:有多条修改数据的语句执行,如果其中某条出错,之前的更改也不会记入数据库
-- 博客记录点滴 转载注明出处
-- 1.先创建一个测试表
declare
  v_sql_drop_table  varchar2(50) := 'drop table my_test';
  v_sql_create_table varchar2(100) := 'create table my_test(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_test 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代码
执行后的输出:
my_test表中有1条记录
[pl/sql 事务]中出现异常,错误代码:ora-1722
回滚后,my_test表中有0条记录
相关阅读:
oracle 10g 安装后重启系统,用plsql连接报没有监听
ora-03114 plsql过程编译断开连接错误
plsql 连接 oracle简单配置
plsql批量forall操作性能提升详解
使用oracle sqldeveloper连接数据库并创建用户
oracle自带的pl/sql developer导入导出数据
在64位win7系统下安装oracle 11g和oracle sql developer客户端
其它类似信息

推荐信息