关于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数据库中执行)。
请各位朋友帮帮忙。


...全文
562 8 打赏 收藏 转发到动态 举报
写回复
用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 ...
ORACLE数据库智能化管理系统2012 软件介绍 序言 ORACLE数据库管理们: 你们还在为处理日常大量数据,天天写过多的SQL语句而烦恼吗? 还在为由于没有面面具到的软件来汇制想要的日常数据报表而烦恼吗? 还在为查找帐务不平的数据或数据重复,而不知是哪些数据错误或重复,造成不能继续操作,而费时费力手工查找问题所在而烦恼吗? 还在为数据要多字段大批量处理或指定满足过多条件,处理成特定数据而手工劳动烦恼吗? 还在为两表数据多字段相关联,要批量修改其一表多字段数据成另一表数据值,而不知怎样做而烦恼吗? 还在为查找数据库安全情况,不知权限分配情况如何?查起来又费时费力,而烦恼吗? 还在为数据库安全情况,表或角色权限批量授权或撤权,操作起来又费时费力,而烦恼吗? 还在为需要多表数据综合计算才能求得到想要的数据结果,而书写SQL语句书写起来复杂而烦恼吗? 还在为达到求某种数据值需要多表数据关联起来后得到结果重复,想去除多余行值,单独书写的SQL语句又无法解决而频繁手工操作或通过编写软件才能实现想要的结果而烦恼吗? 还在为查看数据库会话情况及死锁情况,想批量处理这些死锁及断开不必要空闲会话,一一处理而手功劳动吗? 还在为日常数据处理分析,从查询结果中,求出可自定任意选择行及数字型字段数据求合,而手工一行行、一列列累加求和吗? 还在为某种数据不同类别所占总数比例及各多少?而手工累加一一计算吗?本系统使用了ABC方法计算得出结果。 查询数据条件参数,智能化表字典辅助批量字段输入功能,使您的工作简单而更加轻松,用起来更加顺手。 查询或导入的数据结果智能化创建计算字段和行列分类合计,从而进一步使结果数据更加理想化,省去了您宝贵的数据计算时间。 智能化SQL历史语句保存和历史SQL智能注解查询功能,节省了您智能化重复创建和查询SQL语句的时间,提高了您的工作效率。 数据库状态及运行情况综合查看,使您了解ORACLE运行状况及空间、日志归档、数据文件等使用情况更直观,并可智能生成数据库热备份脚本和备份恢复方案,为您的数据库保驾护航,使您高枕无忧。 本系统可执行SQL分组语句后,再对结果某值代码变为相对应名称,从而提高了数据库对SQL语句执行性能,减轻了因关联表太多查询,造成数据库性能下降带来的负担。 本系统可对执行SQL语句的结果集批量逐行处理多字段值一起做为检索条件,从它表中取出想要的多字段(值或计算结果)数据对相应的目标多字段进行赋值,从而简化了SQL语句书写难度,减少查询时间,提高了综合性能。 批量数据比较功能,增加了数字型字段4种(左右两边数据加减乘除)处理方式和4种行数据处理(左右两边互移或互复制行),可从数据源复合查询结果数据与目标数据进行运算,达到想要的结果等。 数据窗口右键菜单功能整合多种处理,功能强大,简单易操;重复数据可自动处理成唯一,也可自行处理;可自定义选择从查询结果集中的数行,进行数据求合及自定义图形项目分析;字段的10多种属性设置;数据窗口自创帮你省去建表才能进行数据处理的麻烦;各行数据在总数据所占的比例,一目了然,省去你一一计算。 生成可定义标准化数据代码;补足不足数据代码位数; 自由SQL语句查询参数多字段批量字典输入; 外部数据批量进行赋值处理; 数据列名可汉字后,导出成xls格式。 自由选择更新表数据方式,减少对数据库过多无关字段操作。 可根据查询结果自动生成IN、DECODE等多形式函数的参数,省去你查询手工输入上述函数多参数时的痛苦。 批量处理查询结果集中数据去除多余前后空格,增加对多字段字符串数据标准化,替换或去除数据中任意数据位数据,使其达到你想要的数据。 自动创建并可导出全数据库同义词创建语句,省去了你书写的麻烦。 您可以自由定制数据过滤、排序等条件、打印预览并可自动缩放到整张纸大小打印、打印数据行、列自己选定,打印设置自由灵活。 自动生成序列数据,切换数据库,无须退出系统。 人不在时,系统有锁定功能,防止别人动您数据! 您可以自动生成带分组小计的数据查询结果,使用你看的数据更加清晰。 分组查询条件SQL语句(带不带分组小计随您)智能化生成,只需您动几下鼠标就可完成。 交叉数据报表智能化生成,省去你为了一时的数据,而劳命伤财地去开发系统。 过程、触发器、表结构、同义词、视图、在线会话等查看一目了然。 给有关部分下达通知,消息框自动弹出。 。。。。。。。 本系统以智能化语句书写及批量处理数据及图形分析数据为特点,可以解决你的上述及未述后顾之忧,尽量把处理数据的主动权让给用户{本系统许多功能,只要你灵活运用,就可以得到意想不到的收获!},拥有了它,从此让你可以轻松、灵活对待日常数据库数据管理处理工作。 还等什么?赶快与我联系13856992267、QQ:23807773要求试用或购买吧?价格联系时谈! 本系统还可以根据用户需求,增加共性功能。{感谢您的支持及来电来函提出您的宝贵建议,为本系统更加地完善,贡献出您的一份力量!}
SqlToolBox是一款纯绿色的免费数据库客户端软件,基于Java Swing编制而成,旨在于为开发人员,系统工程师和数据库管理员提供一种通用方便和快捷的数据库操作工具,使他们摆脱需要学习掌握使用多种数据库客户端的苦恼,并减轻他们日常操作数据库和编写Sql语句的任务量,帮助他们把精力投入到解决更有意义的问题上去。 SqlToolBox现有功能 1. 能连接到MySql,Oracle和Ms Sql Server三种数据库。 2. 连接到数据库后,会提供数据库Schema和表的树视图以便用户进行浏览和查找,另外还提供了一个过滤器帮助用户缩小查找范围。 3. 用户能自动快速获取单表的创建,查询,更新,删除,建表语句,整表全部数据插入语句,单表对应Pojo类和单表的Hibernate映射文件等常用文字,且可借此构造更复杂的Sql语句。 4. 能执行Sql语句并显示执行结果,如果是查询语句会以表格形式显示结果,还提供CSV形式数据下载;如果是非查询语句或是错误的查询语句则会以文字形式告知用户。 5. 在用户输入Sql语句的过程中提供Sql语法高亮功能,以助于Sql语句的识别。 6. 提供Sql格式化功能以助于Sql语句的识别和整理。 7. 提供Redo/Undo,Shift整体退格进格,大小写转化,将Sql语句用StringBuilder包容以及将Sql语句中关键字大写表示等常用文字编辑功能。这些都能帮助程序员在程序中书写Sql语句。 8. 能保存和记忆数据库信息,以便下次打开。 。 运行SqlToolBox有何前提条件? 将SqlToolBox运行起来的唯一前提是安装JDK6或以上版本。 SqlToolBox需要安装吗? SqlToolBox是一款纯绿色软件,它对您的系统不做出任何更改,因此不需要安装和卸载。 SqlToolBox安全吗? 由于软件使用Java编写而成,它本身就具有较高的安全性。此外作者保证在SqlToolBox整个系列中都不会加入病毒,木马,插件等坏东西。 如何运行SqlToolBox? 解开下载包,然后双击run.bat即可。 在Unix/Linux下如何运行SqlToolBox? 除了也需要安装JDK外,您还需要参照run.bat写一份脚本,然后执行它。 如何使用SqlToolBox打开一个数据库? 程序运行起来后,您将看到一个输入数据库信息的对话框,请依次填入数据库所在机器的IP地址,数据库的库名称,选择数据库的类型以及输入登录数据库的用户名和密码等必要信息。此后再点击“连接数据库”按钮,程序将打开数据库。如果您将以上信息填错也不要紧,程序会提示哪里出现了问题。此外您可以在登录前点击“测试连接”按钮,程序也会告诉您是否能连接到指定的数据库。 打开数据库后程序左边部分如何使用? 成功连接到数据库以后,数据库的Schema和table结构会在画面的左边以树的形式展现出来,如果展现的内容过多,您还可以在上方的“过滤器”输入栏中输入关键字以缩小展现范围。在这颗树中,表格(table)是以小圆点的方式展现的,左键点击这个圆点,程序将在右侧打开一个Sql语句操作窗口,并执行“select * from table”语句,最后在下方以表格的形式展现给您;如果您用右键点击这个圆点,程序将弹出一个右键菜单,选择其中的项目您将可以在右边的Sql语句操作窗口中得到单表的字段信息,创建(insert),查询(select),更新(update),删除语句(delete)及建表语句(create table),单表对应Pojo文件,单表的Hibernate映射文件等文字。 打开数据库后程序右边部分是如何使用的? 用左右键点击表格后,您将在右侧看到一个“Sql语句操作窗口”,它分成三部分:工具栏菜单,输入窗口和输出窗口。输入窗口是用以输入,编辑和整理Sql 语句的;工具栏菜单中的一大排按钮都是为编辑处理输入窗口中的文字而准备的;输出窗口则是展示Sql语句执行后的结果的,如果是查询语句,它会以表格的形式告知您查询的结果,如果是其它语句,它会以文字的形式告知。通常的操作手法是,先在输入窗口中用鼠标选中您要操作的文本,再在工具栏菜单中点击执行特定操作的按钮,然后在下方的输出窗口中就能看到具体的结果,当然如果仅是文本编辑操作的话输出窗口是不会有反应的。 如何执行Sql语句? 程序员和数据库管理员总是习惯使用语句来操作数据库,这也是本软件的最重要功能之一。执行Sql语句的过程具体来说是这样做的,首先,在输入窗口输入您向执行的Sql语句,如“select * from table”之类,当然您更可以通过表格的右键菜单来获得常用的sql语句(在输入或是粘贴文本的过程中,Sql语句中的关键字会以蓝色显示,这是语法高亮功能所致);其次,你需要选中你想执行的文本,再点击工具栏菜单中的向右三角形按钮,这段文本将得到执行执行结果将在下方的输出窗口得到展示。如果您执行的是查询语句,输出窗口将以表格的形式列出查询结果集的字段和内容;如果您执行的是删除,更新,添加,修改表等语句或是执行错误的Sql文本,输出窗口将以文本形式告知执行结果。另外工具栏菜单中的双向右三角形按钮用于批量执行Sql语句,它以分号“;”来作为每段Sql的分隔标志,然后分别执行每段。 如何快速调整对执行查询语句后得到的表格列宽度? 如果您想自动调整某列的宽度,可以双击这列的表头,此后这列的宽度会根据这列的最长文字进行调整;您还可以在表格上点击右键,选择“调整列宽为最适合状态”一项,那么所有的列宽都会进行调整。 如何得到执行查询语句后得到的表格的内容? 您还可以在表格上点击右键,选择“下载表格为CSV文件”一项,此后查询语句和得到的结果都会被放入一个CSV文件中。CSV是一中文本文件,但您可以用Excel打开它,也会得到xls文件一样的效果。 在新增或是删除一张表后,在左边的树中为什么没有相应的变化? 新增或是删除一张表后,您需要手动执行一下左上方的更新按钮(最上方的大图标中第一个),此后程序会重新载入数据库的Schema和table,这样您刚才对表格进行增删操作就能体现出来。 如果我需要常打开数据库进行操作或是需要常操作多个数据库,程序能为我提供那些便利? 本软件有记忆功能,如果您正确连接到一个数据库,那么相应的信息如IP地址,数据库名,数据库类型,连接数据库的用户名和密码都会被记忆下来,这样下次打开时就不用重复输入了。如果您需要常操作多个数据库,您可以通过保存按钮(最上方五个大图标中的第二个)将数据库信息保存成XML文件,这样在登录画面中就可以通过“打开文件按钮”得到相应的数据库信息。

17,086

社区成员

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

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