gpt4 book ai didi

database - 自动创建数据库表的脚本

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:41 24 4
gpt4 key购买 nike

我必须制作一个脚本来创建必须具有 1.000 个表和 1.000 列的模式。表名(示例):TABLE_058列名(示例):T058_COL_078

表格应该是空的。我正在使用 Oracle DB,不太适合使用 SQL/PL-SQL。如果有人能指出我正确的方向,我将不胜感激。

最佳答案

如果您将它保存为脚本然后在 SQL*Plus 下执行它,这将起作用。表的名称为 TABLE_000TABLE_999,列的顺序也类似 000999

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

一些注意事项:

  • 编号方案是从 000 到 999,因为您的表/列名称模板使用三位数字,而达到 1000 个表/列的唯一方法是从零开始。

    <
  • SPOOL C:\CreateTables.sql 中的文件名更改为适合您的文件名。

  • 您没有指定列类型,因此上面的脚本将它们全部设为 VARCHAR2(1)

  • 从 SQL*Plus 以脚本形式运行上述内容很重要。如果不这样做,大量的 SQL*Plus 聊天将最终出现在假脱机输出中。要从 SQL*Plus 运行脚本,只需键入“at”符号 (@),然后键入脚本的名称。如果将其命名为 TableGenScript.sql,则执行以下操作:

    SQL> @TableGenScript.sql

脚本的前几行输出如下所示:

CREATE TABLE TABLE_000 (  T000_COL_000 VARCHAR2(1),
T000_COL_001 VARCHAR2(1),
T000_COL_002 VARCHAR2(1),
T000_COL_003 VARCHAR2(1),

试一试,您应该能够根据自己的具体需求进行调整。


附录 NikolaB 询问如何改变列类型,答案太长,无法放在评论中......

要改变列类型,请使用 || 查询部分'VARCHAR2(1)' || 并将其替换为您的数据类型逻辑。例如,如果 0-599 列是 VARCHAR2,600-899 列是 NUMBER,900-999 列是 DATE,更改脚本像这样:

... 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

我用注释突出显示了 CASE 语句。如果您将数据类型逻辑放在 CASEEND 之间,您应该没问题。

关于database - 自动创建数据库表的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com