Это будет работать, если вы сохраните его как скрипт, а затем выполните его под SQL * Plus. Таблицы называются TABLE_000
по TABLE_999
, а столбцы аналогичным образом упорядочены 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
Некоторые вещи, чтобы отметить:
Схема нумерации составляет от 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
заявление с комментарий. Если вы поместите свою логику типа данных между CASE
и END
, вы должны быть в порядке.
спасибо! У меня возникли трудности с настройкой скрипта, у вас есть полезная ссылка, откуда я могу узнать о синтаксисе. Я должен иметь три типа данных столбца (varchar2, дата, число), но я не могу написать его без ошибок. Это заставляет меня чувствовать себя глупо, это звучит так просто. – NikolaB
@NikolaB - это далеко не просто, поэтому не чувствуйте себя глупо. Я не думаю, что вы найдете какую-либо целевую помощь в Интернете, поэтому я обновил свой ответ. Проверьте «Addendum» в конце для получения справки об изменении типа данных. –