Oracle 批量执行多个sql文件
Oracle批量执行多个sql文件,需求1:若其中一个失败,则停止执行后续的文件;需求2:若其中一个失败则全部回滚。求大神帮忙。脚本如下:@D:\workspacefor...
Oracle 批量执行多个sql文件,
需求1:若其中一个失败,则停止执行后续的文件;
需求2:若其中一个失败则全部回滚。
求大神帮忙。
脚本如下:
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_11_ocoreamsdata_tab_mas_ex-zhongkai001-0707.sql
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_12_ocoreamsdata_ind_mas_ex-zhongkai001-0707.sql
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_13_ocoreamsdata_syn_mas_ex-zhongkai001-0707.sql 展开
需求1:若其中一个失败,则停止执行后续的文件;
需求2:若其中一个失败则全部回滚。
求大神帮忙。
脚本如下:
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_11_ocoreamsdata_tab_mas_ex-zhongkai001-0707.sql
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_12_ocoreamsdata_ind_mas_ex-zhongkai001-0707.sql
@D:\workspaceforpafa5\db\MACCO1\pama-core2.0.0\ocoreamsdata\SR_442844_13_ocoreamsdata_syn_mas_ex-zhongkai001-0707.sql 展开
2个回答
2016-01-15 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
方法如下:
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;
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;
展开全部
你可以再写一个回滚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;如此类推。
可能有点繁琐,希望对您有用阿。
然后,创建一个状态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;如此类推。
可能有点繁琐,希望对您有用阿。
更多追问追答
追问
这样子做太繁琐了,可以不回滚,出错则直接停止执行后续脚本的命令有么
追答
您分别在11_ocoreamsd、12_ocoreamsd、13_ocoreamsd中添加脚本,如果出现异常则直接终止即可。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询