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

虽然之前写了不少Oracle上的SQL语句,但是没有抽出时间对Oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与理解,在实践中就不能举一反三,就不能写出高规范高质量的SQL语句。

[sql]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. -- PL/SQL 基本写法  
  2. -- 说明:声明、异常处理部分为可选,视具体程序而定  
  3. -- 博客记录点滴 http://blog.csdn.net/ls_man 转载注明出处  
  4. DECLARE -- 声明变量  
  5.   A INTEGER;-- 只声明  
  6.   B FLOAT := 0;-- 带赋值的声明  
  7.   C FLOAT;  
  8. BEGIN -- 可执行语句开始  
  9.   DBMS_OUTPUT.put_line('开始执行可执行语句块![http://blog.csdn.net/ls_man转载注明出处]');  
  10.   A := 1.5;  
  11.   DBMS_OUTPUT.put_line('A=' || A);  
  12.   DBMS_OUTPUT.put_line('B=' || B);  
  13.   C := A / B; -- 会引发分母为0的异常,下面的两条输出语句将无法执行  
  14.   DBMS_OUTPUT.put_line('C=' || C);  
  15.   DBMS_OUTPUT.put_line('可执行语句块执行完毕![http://blog.csdn.net/ls_man转载注明出处]');  
  16. EXCEPTION -- 异常处理  
  17.   WHEN OTHERS THEN  
  18.     DBMS_OUTPUT.put_line('[PL/SQL 基本写法]中出现异常,错误代码:ORA'||sqlcode);  
  19. END-- 可执行语句结束  
  20. -- 该符号表示执行这段PL/SQL代码  

执行后的输出:

[sql]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 开始执行可执行语句块![http://blog.csdn.net/ls_man转载注明出处]  
  2. A=2  
  3. B=0  
  4. [PL/SQL 基本写法]中出现异常,错误代码:ORA-1476  


我们再看一下如何通过异常处理实现数据库事务:

[sql]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. -- PL/SQL 事务  
  2. -- 说明:有多条修改数据的语句执行,如果其中某条出错,之前的更改也不会记入数据库  
  3. -- 博客记录点滴 http://blog.csdn.net/ls_man 转载注明出处  
  4. -- 1.先创建一个测试表  
  5. DECLARE  
  6.   V_SQL_DROP_TABLE   VARCHAR2(50) := 'DROP TABLE MY_TEST';  
  7.   V_SQL_CREATE_TABLE VARCHAR2(100) := 'CREATE TABLE MY_TEST(NOT_NULL VARCHAR2(20) NOT NULL, ONLY_INT INTEGER)';  
  8. BEGIN  
  9.   EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 创建测试表  
  10. EXCEPTION  
  11.   -- 如果表已存在,则会引发异常  
  12.   WHEN OTHERS THEN  
  13.     EXECUTE IMMEDIATE V_SQL_DROP_TABLE; -- 先删除  
  14.     EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 再创建  
  15. END;  
  16. /  
  17. --2.用我们刚创建的测试表进行测试  
  18. DECLARE   
  19.   V_COUNT INTEGER-- 表中记录的行数  
  20.   V_INT_VAL MY_TEST.ONLY_INT%TYPE; -- 使用%TYPE关键字参照某表某字段类型声明变量  
  21. BEGIN  
  22.   V_INT_VAL := 123456;  
  23.   -- 插入一条正确的数据  
  24.   INSERT INTO MY_TEST VALUES ('TEST_SUCCESS', V_INT_VAL);  
  25.   -- 查询条数为1条,我们发现插入成功了  
  26.   SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;  
  27.   DBMS_OUTPUT.put_line('MY_TEST表中有' || V_COUNT || '条记录');  
  28.   
  29.   -- 插入一条错误的数据,因为第二个字段为int型,插入字符数据肯定会出错  
  30.   INSERT INTO MY_TEST VALUES ('TEST_FAIL''ABC');  
  31.   
  32.   -- 最后提交更改  
  33.   COMMIT;  
  34. EXCEPTION  
  35.   -- 异常处理  
  36.   WHEN OTHERS THEN  
  37.     ROLLBACK-- 异常时回滚,这样第一次插入的正确数据也不会保存到数据库  
  38.     DBMS_OUTPUT.put_line('[PL/SQL 事务]中出现异常,错误代码:ORA' || sqlcode);  
  39.     -- 我们验证一下表里的数据为0条  
  40.     SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;  
  41.     DBMS_OUTPUT.put_line('回滚后,MY_TEST表中有' || V_COUNT || '条记录');  
  42. END-- 可执行语句结束  
  43. -- 该符号表示执行这段PL/SQL代码  

执行后的输出:

[sql]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MY_TEST表中有1条记录  
  2. [PL/SQL 事务]中出现异常,错误代码:ORA-1722  
  3. 回滚后,MY_TEST表中有0条记录 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值