http://blog.youkuaiyun.com/ls_man/article/details/16959615
虽然之前写了不少Oracle上的SQL语句,但是没有抽出时间对Oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与理解,在实践中就不能举一反三,就不能写出高规范高质量的SQL语句。
-
-
-
- DECLARE
- A INTEGER;
- B FLOAT := 0;
- C FLOAT;
- BEGIN
- DBMS_OUTPUT.put_line('开始执行可执行语句块![http://blog.youkuaiyun.com/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.youkuaiyun.com/ls_man转载注明出处]');
- EXCEPTION
- WHEN OTHERS THEN
- DBMS_OUTPUT.put_line('[PL/SQL 基本写法]中出现异常,错误代码:ORA'||sqlcode);
- END;
- /
执行后的输出:
- 开始执行可执行语句块![http://blog.youkuaiyun.com/ls_man转载注明出处]
- A=2
- B=0
- [PL/SQL 基本写法]中出现异常,错误代码:ORA-1476
我们再看一下如何通过异常处理实现数据库事务:
-
-
-
-
- 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;
- /
-
- DECLARE
- V_COUNT INTEGER;
- V_INT_VAL MY_TEST.ONLY_INT%TYPE;
- BEGIN
- V_INT_VAL := 123456;
-
- INSERT INTO MY_TEST VALUES ('TEST_SUCCESS', V_INT_VAL);
-
- SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;
- DBMS_OUTPUT.put_line('MY_TEST表中有' || V_COUNT || '条记录');
-
-
- INSERT INTO MY_TEST VALUES ('TEST_FAIL', 'ABC');
-
-
- COMMIT;
- EXCEPTION
-
- WHEN OTHERS THEN
- ROLLBACK;
- DBMS_OUTPUT.put_line('[PL/SQL 事务]中出现异常,错误代码:ORA' || sqlcode);
-
- SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;
- DBMS_OUTPUT.put_line('回滚后,MY_TEST表中有' || V_COUNT || '条记录');
- END;
- /
执行后的输出:
- MY_TEST表中有1条记录
- [PL/SQL 事务]中出现异常,错误代码:ORA-1722
- 回滚后,MY_TEST表中有0条记录
- 版权:求知域http: