Database 用于自动创建数据库表的脚本
我必须制作一个脚本,创建一个必须有1.000个表和1.000个列的模式。 表名(示例):表_058 列名(示例):T058\u COL\u 078 表应该是空的。我正在使用Oracle DB,但不太适合使用SQL/PL-SQL。Database 用于自动创建数据库表的脚本,database,oracle,plsql,Database,Oracle,Plsql,我必须制作一个脚本,创建一个必须有1.000个表和1.000个列的模式。 表名(示例):表_058 列名(示例):T058\u COL\u 078 表应该是空的。我正在使用Oracle DB,但不太适合使用SQL/PL-SQL。 如果有人能给我指出正确的方向,我将不胜感激。导出模式的元数据 exp userid=user/pass@db owner=someowner rows=n file=somefile.dmp 如果使用记事本打开文件,则可以看到DML语句。 然后可以使用 imp use
如果有人能给我指出正确的方向,我将不胜感激。导出模式的元数据
exp userid=user/pass@db owner=someowner rows=n file=somefile.dmp
如果使用记事本打开文件,则可以看到DML语句。
然后可以使用
imp userid=user/pass@otherdb file=somefile.dmp full=y
您还可以复制到同一数据库上的另一个架构(通常用于测试)
您还可以使用新的数据泵进行并行和压缩增强。
签出如果将其保存为脚本,然后在SQL*Plus下执行,则此操作将有效。这些表通过
TABLE_999
命名为TABLE_000
,列的顺序类似于000
到999
SET ECHO OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
SET PAGESIZE 0
SET LINESIZE 2000
SET FEEDBACK OFF
SPOOL C:\CreateTables.sql
SELECT
CASE
WHEN ColIndex = 0 THEN 'CREATE TABLE TABLE_' || TO_CHAR(TableIndex, 'FM000') || ' ('
ELSE NULL
END ||
' T' || TO_CHAR(TableIndex, 'FM000') || '_COL_' || TO_CHAR(ColIndex, 'FM000') || ' VARCHAR2(1)' ||
CASE
WHEN ColIndex = 999 THEN ');'
ELSE ','
END
FROM (
SELECT TableIndex, ColIndex FROM (
SELECT LEVEL - 1 AS TableIndex FROM DUAL CONNECT BY LEVEL <= 1000)
CROSS JOIN (
SELECT LEVEL - 1 AS ColIndex FROM DUAL CONNECT BY LEVEL <= 1000)
ORDER BY TableIndex, ColIndex);
SPOOL OFF
脚本的前几行输出如下所示:
CREATE TABLE TABLE_000 ( T000_COL_000 VARCHAR2(1),
T000_COL_001 VARCHAR2(1),
T000_COL_002 VARCHAR2(1),
T000_COL_003 VARCHAR2(1),
... all the SETs like above, then the SPOOL ...
SELECT
CASE
WHEN ColIndex = 0 THEN 'CREATE TABLE TABLE_' || TO_CHAR(TableIndex, 'FM000') || ' ('
ELSE NULL
END ||
' T' || TO_CHAR(TableIndex, 'FM000') || '_COL_' || TO_CHAR(ColIndex, 'FM000') ||
CASE -- put the data-type logic in this CASE
WHEN ColIndex BETWEEN 0 AND 599 THEN ' VARCHAR2(1)'
WHEN ColIndex BETWEEN 600 AND 899 THEN ' NUMBER'
ELSE ' DATE'
END || -- data-type logic ends here and original query resumes
CASE
WHEN ColIndex = 999 THEN ');'
ELSE ','
END
FROM
... and then the same as above, all the way through to the SPOOL OFF
试一试,你应该能够根据自己的具体需要调整它
附录尼古拉询问如何改变栏目类型,答案太长,无法放入评论中 要改变列类型,请在查询中显示
|| |'VARCHAR2(1)| |
的部分,并将其替换为数据类型逻辑。例如,如果列0-599为VARCHAR2
,列600-899为NUMBER
,列900-999为DATE
,请将脚本更改为如下内容:
CREATE TABLE TABLE_000 ( T000_COL_000 VARCHAR2(1),
T000_COL_001 VARCHAR2(1),
T000_COL_002 VARCHAR2(1),
T000_COL_003 VARCHAR2(1),
... all the SETs like above, then the SPOOL ...
SELECT
CASE
WHEN ColIndex = 0 THEN 'CREATE TABLE TABLE_' || TO_CHAR(TableIndex, 'FM000') || ' ('
ELSE NULL
END ||
' T' || TO_CHAR(TableIndex, 'FM000') || '_COL_' || TO_CHAR(ColIndex, 'FM000') ||
CASE -- put the data-type logic in this CASE
WHEN ColIndex BETWEEN 0 AND 599 THEN ' VARCHAR2(1)'
WHEN ColIndex BETWEEN 600 AND 899 THEN ' NUMBER'
ELSE ' DATE'
END || -- data-type logic ends here and original query resumes
CASE
WHEN ColIndex = 999 THEN ');'
ELSE ','
END
FROM
... and then the same as above, all the way through to the SPOOL OFF
我突出显示了带有注释的
案例
语句。如果您将数据类型逻辑放在案例
和结尾
之间,您应该会很好。非常感谢!我在自定义脚本时遇到困难,您是否有一些有用的链接,我可以从中学习语法。我必须有三种类型的列数据(varchar2、date、number),但我不能编写没有错误的列数据。这让我觉得自己很愚蠢,听起来很简单。@NikolaB-这远不简单,所以不要觉得自己很愚蠢。我认为你在网上找不到任何有针对性的帮助,所以我更新了我的答案。查看末尾的“附录”以获得有关更改数据类型的帮助。