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

php中文网
发布: 2016-06-07 17:33:41
原创
1344人浏览过

虽然之前写了不少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条记录

Voicepods
Voicepods

Voicepods是一个在线文本转语音平台,允许用户在30秒内将任何书面文本转换为音频文件。

Voicepods 93
查看详情 Voicepods

相关阅读:

Oracle 10g 安装后重启系统,用PLSQL连接报没有监听

ORA-03114 PLSQL过程编译断开连接错误

PLSQL 连接 Oracle简单配置

PLSQL批量Forall操作性能提升详解

使用Oracle SQLDeveloper连接数据库并创建用户

Oracle自带的PL/SQL Developer导入导出数据

在64位Win7系统下安装Oracle 11g和Oracle SQL Developer客户端

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号