问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle 批量执行多个sql文件

发布网友 发布时间:2022-04-07 16:00

我来回答

3个回答

懂视网 时间:2022-04-07 20:21


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代码

oracle执行多个pl/sql块

标签:

热心网友 时间:2022-04-07 17:29

  方法如下: 
  1:运行cmd进入命令行界面
  2:进入到存放批量sql的文件夹下面
  3:输入命令 sqlplus 数据库名/密码@数据库 按回车键
  4:输入spool 指定路径:\a.log 按回车键 (此步骤的主要作用就是追踪批量执行sql的日志,路径随便写,只要能找到就行,a.log可以随便起名,但是必须要.log后缀)
  5:@start.sql 按回车键(在批量sql文件夹下写一个文件,名字叫start.sql,其中在这个文件里面写批量sql的文件名)
  具体格式如下:@@sql的文件名.sql;
  @@sql的文件名2.sql;
  6:spool off (此时a.log中所有日志已经写入完毕)
  7:exit 退出sqlplus
  当然只有一个sql文件,但是里面有多个insert语句,数据量非常大,此时也可以在命令状态下执行,前4步是一样的,第五步就是@文件名.sql;

热心网友 时间:2022-04-07 18:47

你可以再写一个回滚11_ocoreamsd、12_ocoreamsd、13_ocoreamsd的脚本,例如rollback_all.sql;

然后,创建一个状态table,例如:
create table t_script_status(script_id number(10), script_status varchar2(20));
insert into t_script_status (script_id, script_status) values(11, 'not run');
insert into t_script_status (script_id, script_status) values(12, 'not run');
insert into t_script_status (script_id, script_status) values(13, 'not run');
commit;

然后,分别在11_ocoreamsd、12_ocoreamsd、13_ocoreamsd中添加代码,如果没有错误或异常,则更新t_script_status,把脚本自己对应的那一行的状态,由'not run'改为'successful';

然后,创建一个存储过程,里面首先执行11_ocoreamsd,检查t_script_status,如果对应的状态仍为'not run',则表明11_ocoreamsd有错误或异常,则执行rollback_all.sql;如果是'successful',则继续执行12_ocoreamsd;如此类推。

可能有点繁琐,希望对您有用阿。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桃李芬芳的近义词是? 请会答正确。 急... 墨西哥很混乱吗 为什么我的OPPOR9手机连接到任何蓝牙设备放歌曲,都没有办法在蓝牙设备... OPPOA9如何连接酷狗与手机蓝牙? 华为荣耀3X 白色畅玩版的声音调至最大声仍很小声 荣耀3x刷机后卸载了一些系统软件,然后就无法开机,一直停留在开机界面... 平安富赢金生年金保险值得买吗?最全产品测评! 收音机音量旋钮音量最大还是小 德生pl_450收音机音量电位器声音惑大惑小,电位器的型号是什么_百度知 ... 浙江金融学院有什么专业 苹果手机用大疆osmo 怎么激活? 眼眉毛周围的皮肤发黄是怎么回事 Start跟star到底是不是同一个牌子?我查实达针式打印机的时候发现网上时而写还Start时而写star,搞蒙了 眼睛周围发黄是因为什么原因呢 allstar是什么牌子 眼睛周围特别黄,为什么? dkastar手表是什么牌子的? 眼睛周围发黄怎么回事? 哪种软件可以将图片中的文字提取出来并存为word格式 空气检测中的tvoc包括那些?有二甲苯吗? 这种狗叫什么名字?什么品种? osmo 大疆怎么使用 空压机为什么需要卸载过程? 四个星星的衣服是什么牌子 眼睛周围的皮肤比其他地方的暗黄为什么? 英格索兰空压机卸载和加载是怎么工作的 为什么我眼睛周围的皮肤黄黄的 谁知道GoldStar的品牌 眼圈发黄是怎么回事? 活塞空压机的加载卸载是通过什么机构实现的 华为手机包装上生产日期 蓓怎么读? 蓓怎么读 刷weibo看到好多人在说简爱的酸奶,最近是不是有活动? 蓓怎么读音是什么 今天看到了一个叫简爱的酸奶,这个品牌的酸奶有哪些产品? 蓓这个字怎么读 weibo上好多人刷的简爱是什么酸奶? 什么是IDC工程师 IDC工程师与技术支持、网络工程师有什么区别?哪个级别更高? 简爱酸奶竞争对手分析 最近简爱0添加裸酸奶有什么活动吗? 蓓蕾的“蓓”到底是多音字吗?为什么好多人都把它念成“pei” 简爱酸奶靠谱吗 简爱酸奶跟市面上的酸奶比,好在哪里?为什么大家都说这个酸奶好 idc机房基建的工作内容都有什么? 蓓蓓读音是什么? 叶蓓的蓓不是念bei吗?为什么人们给她念pei? 为什么简爱酸奶有点贵呢? “蓓”念“bei” 还是“pei” ? “蓓”字用日语怎么写呀