oracle bat执行sql
oracle bat执行sql
项目组有一个需求:
在以XXX开头的所有表空间中,创建名为test表,并将其整理成.bat文件,经过一天的折腾,不断询问度娘,终于完成任务,下面对过程做个小结。
1.bat文件
Sql代码
set/p dbname=请输入数据库实例名并按回车:
set/p username=请输入用户名并按回车:
set/p password=请输入密码并按回车:
sqlplus %username%/%password%@%dbname% @init.sql %username% %password% %dbname%
2.init.sql文件
注:&1 &2 &3的值对应%username% %password% %dbname%
Sql代码
spool logs/log.log
conn &1/&2@&3;
@@test.sql ;
spool off;
3.test.sql文件
注意:test.sql的块语句的最未尾,添加斜杠
Sql代码
declare
begin
for t in (select 'drop table '||tablespace_name||'.'||table_name drop_table
from all_tables
where tablespace_name like 'XXX%' and table_name=upper('TEST')) loop
--删除表
execute immediate t.drop_table;
end loop;
for t in (select 'create table ' || tablespace_name ||'.TEST (
id int ,
name varchar(2)
)' c_table
from USER_TABLESPACES WHERE tablespace_name like 'XXX%') Loop
--创建表
execute immediate t.c_table;
end loop;
end;
/