虽然之前写了不少Oracle上的SQL语句,但是没有抽出时间对Oracle进行一个系统的学习,实践固然重要,但没有一个理论上的规范学习与理解,在实践中就不能举一反三,就不能写出高规范高质量的SQL语句。-- PL/SQL 基本写法
-- 说明:声明、异常处理部分为可选,视具体程序而定
-- 博客记录点滴 http://www.linuxidc.com 转载注明出处
DECLARE -- 声明变量
A INTEGER;-- 只声明
B FLOAT := 0;-- 带赋值的声明
C FLOAT;
BEGIN -- 可执行语句开始
DBMS_OUTPUT.put_line("开始执行可执行语句块![http://www.linuxidc.com转载注明出处]");
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("可执行语句块执行完毕![http://www.linuxidc.com转载注明出处]");
EXCEPTION -- 异常处理
WHEN OTHERS THEN
DBMS_OUTPUT.put_line("[PL/SQL 基本写法]中出现异常,错误代码:ORA"||sqlcode);
END; -- 可执行语句结束
/ -- 该符号表示执行这段PL/SQL代码执行后的输出:开始执行可执行语句块![http://blog.csdn.net/ls_man转载注明出处]
A=2
B=0
[PL/SQL 基本写法]中出现异常,错误代码:ORA-1476我们再看一下如何通过异常处理实现数据库事务:-- PL/SQL 事务
-- 说明:有多条修改数据的语句执行,如果其中某条出错,之前的更改也不会记入数据库
-- 博客记录点滴 http://www.linuxidc.com 转载注明出处
-- 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连接报没有监听 http://www.linuxidc.com/Linux/2013-03/81937.htmORA-03114 PLSQL过程编译断开连接错误 http://www.linuxidc.com/Linux/2013-03/81822.htmPLSQL 连接 Oracle简单配置 http://www.linuxidc.com/Linux/2013-01/77849.htmPLSQL批量Forall操作性能提升详解 http://www.linuxidc.com/Linux/2012-12/76997.htm使用Oracle SQLDeveloper连接数据库并创建用户 http://www.linuxidc.com/Linux/2013-01/78477.htmOracle自带的PL/SQL Developer导入导出数据 http://www.linuxidc.com/Linux/2013-01/77885.htm在64位Win7系统下安装Oracle 11g和Oracle SQL Developer客户端 http://www.linuxidc.com/Linux/2012-11/74809.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12DDL操作内部执行原理Oracle 用存储过程杀掉session解决锁表的问题相关资讯 PL/SQL
- PL/SQL之存储过程和函数 (今 14:09)
- PL/SQL Developer连接本地Oracle (07月27日)
- 【PL/SQL系列】Oracle存储过程使用 (04月23日)
| - PL/SQL Developer 使用技巧分享 (09月16日)
- PL/SQL实现Java中的split()方法的 (07月10日)
- 从一个案例看PL/SQL代码片的编译与 (03月04日)
|
本文评论 查看全部评论 (0)