http://blog.csdn.net/ls_man/article/details/16959615
虽然之前写了不少Oracle上的SQL语句,但是没有抽出时间对Oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与理解,在实践中就不能举一反三,就不能写出高规范高质量的SQL语句。
[sql]
view plain
copy
-
-
- --博客记录点滴http://blog.csdn.net/ls_man转载注明出处
- DECLARE
- AINTEGER;
- BFLOAT:=0;
- CFLOAT;
- BEGIN
- DBMS_OUTPUT.put_line('开始执行可执行语句块![http://blog.csdn.net/ls_man转载注明出处]');
- A:=1.5;
- DBMS_OUTPUT.put_line('A='||A);
- DBMS_OUTPUT.put_line('B='||B);
- C:=A/B;
- DBMS_OUTPUT.put_line('C='||C);
- DBMS_OUTPUT.put_line('可执行语句块执行完毕![http://blog.csdn.net/ls_man转载注明出处]');
- EXCEPTION
- WHENOTHERSTHEN
- DBMS_OUTPUT.put_line('[PL/SQL基本写法]中出现异常,错误代码:ORA'||sqlcode);
- END;
- /
执行后的输出:
copy
开始执行可执行语句块![http://blog.csdn.net/ls_man转载注明出处]
A=2
B=0
[PL/SQL基本写法]中出现异常,错误代码:ORA-1476
我们再看一下如何通过异常处理实现数据库事务:
copy
--PL/SQL事务
--说明:有多条修改数据的语句执行,如果其中某条出错,之前的更改也不会记入数据库
--1.先创建一个测试表
DECLARE
V_SQL_DROP_TABLEVARCHAR2(50):='DROPTABLEMY_TEST';
V_SQL_CREATE_TABLEVARCHAR2(100):='CREATETABLEMY_TEST(NOT_NULLVARCHAR2(20)NOTNULL,ONLY_INTINTEGER)';
BEGIN
EXECUTEIMMEDIATEV_SQL_CREATE_TABLE;
EXCEPTION
--如果表已存在,则会引发异常
THEN
EXECUTEIMMEDIATEV_SQL_DROP_TABLE;
--再创建
END;
/
--2.用我们刚创建的测试表进行测试
DECLARE
V_COUNT--表中记录的行数
V_INT_VALMY_TEST.ONLY_INT%TYPE;
BEGIN
V_INT_VAL:=123456;
--插入一条正确的数据
INSERTINTOMY_TESTVALUES('TEST_SUCCESS',V_INT_VAL);
--查询条数为1条,我们发现插入成功了
SELECTCOUNT(*)INTOV_COUNTFROMMY_TEST;
DBMS_OUTPUT.put_line('MY_TEST表中有'||V_COUNT||'条记录');
--插入一条错误的数据,因为第二个字段为int型,插入字符数据肯定会出错
VALUES('TEST_FAIL','ABC');
--最后提交更改
COMMIT;
--异常处理
ROLLBACK;
DBMS_OUTPUT.put_line('[PL/SQL事务]中出现异常,错误代码:ORA'||sqlcode);
--我们验证一下表里的数据为0条
DBMS_OUTPUT.put_line('回滚后,MY_TEST表中有'||V_COUNT||'条记录');
--可执行语句结束
/
MY_TEST表中有1条记录
[PL/SQL事务]中出现异常,错误代码:ORA-1722
回滚后,MY_TEST表中有0条记录
- 版权:求知域http:
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|