DECLARE
V_SQL_DROP_TABLE VARCHAR2(50) := 'DROP TABLE MY_TEST2';
V_SQL_CREATE_TABLE VARCHAR2(100) := 'CREATE TABLE MY_TEST2(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_TEST2 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代码
相关文章
- 关于asp.net程序连接不了ORACLE数据库而PL/SQL可以连接的问题
- Linux系统下Oracle执行SQL脚本后中文出现乱码解决方法
- ORA-00001: 违反唯一约束条件在 oracle 中执行 sql 语句时,报错:“ORA-00001: 违反唯一约束条件 SYS_C0011100”解决方案:
- 在MyBatis中执行多个SQL查询并返回多个结果集
- Oracle中PL/SQL 范例
- oracle12C数据库JSON的应用 --PL/SQL使用json简单入门篇
- PL\SQL 打开时出现"动态执行表不可访问,本会话的自动统计被禁止"
- Oracle SQL Developer(oracle最新推出的图形化IDE,不同于PL/SQL DEVELOP)
- Oracle查询最近执行过的SQL语句
- oracle运行缓慢原因,Oracle SQL执行缓慢的原因以及解决方案