关于Oracle执行批量建表脚本的问题

Ykang 2012-11-17 12:50:39
问题描述:
数据库有几十个用户,每个用户具有相同的表结构,建表脚本结构如下:
prompt 提示信息
set feedback off
set define off
prompt Dropping 表名...
drop table 表名 cascade constraints;
......

Create Table 表名
(
......
);

comment .......注释内容;
.......
alter table 表名
add constraint 约束名;

--其他表
........;
set feedback on
set define on
prompt Done.

想批量自动执行建表脚本,想将上述脚本存入一个表中的Clob字段中,然后用存贮过程实现自动建表的功能,
但有以下问题难以解决:
1、如何以不同的用户执行该存贮过程,如果在每个用户部署该存贮过程,显然不划算,工作量太繁重。
2、在Oracle数据库中有无办法执行此脚本(只能在Oracle数据库中执行)。
请各位朋友帮帮忙。


...全文
602 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
izj 2012-11-26
  • 打赏
  • 举报
回复
一定要用存储过程吗? 可以写一个批处理脚本.bat文件。 用这个脚本文件循环一次读入所有的用户名和密码以及需要执行的SQL脚本。 然后双击.bat文件就可以了。。 有兴趣的话。。。我可以写详细点儿。。。
andornot123 2012-11-19
  • 打赏
  • 举报
回复
你可以用内置表查询出来(select * from dba_users),然后结合写。
cutebear2008 2012-11-19
  • 打赏
  • 举报
回复
用oracle的 替换变量 试试,把脚本中的表名改成一个变量,执行时自动填充。 create table &&schema_name.table_name();
BenChiM888 2012-11-19
  • 打赏
  • 举报
回复
1、如何以不同的用户执行该存贮过程,如果在每个用户部署该存贮过程,显然不划算,工作量太繁重。 ====> 给改存储过程创建一个公有同义词,把execute 权限赋给全员(public) 2、在Oracle数据库中有无办法执行此脚本(只能在Oracle数据库中执行)。 ====> 这个估计得 先解析clob 字段中的数据流,然后再execute immediate 执行 绕不过去
Ykang 2012-11-19
  • 打赏
  • 举报
回复
TO fw0124 : 呵呵,你这个办法是可以的。但我的要求是使用程序自动实现,并且用存储过程。
Ykang 2012-11-17
  • 打赏
  • 举报
回复
谢谢楼上,我也是这样想的,但还有问题需要解决: Oracle内部有无存贮过程执行此脚本?传统 EcxCute Immediate大概是不行的。
软件钢琴师 2012-11-17
  • 打赏
  • 举报
回复
你可以在表中存储要建表的用户,然后取出来和表名 组合一下,(例如:hr.tablename(field1||fielde) ,dp.tablename...) 在sys用户下执行
fw0124 2012-11-17
  • 打赏
  • 举报
回复
最好的办法是把创建表的sql写入个文件,例如createschema.sql, 然后写个shell脚本, 用户1登陆sqlplus, @createschema.sql, 退出sqlplus 用户2登陆sqlplus, @createschema.sql, 退出sqlplus ...

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧