2013-04-09 4 views
1

Мне нужно создать скрипт, который создает схему, которая должна иметь 1000 таблиц с 1.000 столбцами. Название таблицы (пример): TABLE_058 Название столбца (пример): T058_COL_078Скрипт для автоматического создания таблиц БД

Столы должны быть пустыми. Я работаю с Oracle DB и не слишком уместен с SQL/PL-SQL. Было бы очень важно, если бы кто-то указал мне в правильном направлении.

ответ

2

Это будет работать, если вы сохраните его как скрипт, а затем выполните его под 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, вы должны быть в порядке.

+0

спасибо! У меня возникли трудности с настройкой скрипта, у вас есть полезная ссылка, откуда я могу узнать о синтаксисе. Я должен иметь три типа данных столбца (varchar2, дата, число), но я не могу написать его без ошибок. Это заставляет меня чувствовать себя глупо, это звучит так просто. – NikolaB

+1

@NikolaB - это далеко не просто, поэтому не чувствуйте себя глупо. Я не думаю, что вы найдете какую-либо целевую помощь в Интернете, поэтому я обновил свой ответ. Проверьте «Addendum» в конце для получения справки об изменении типа данных. –

1

Экспортировать метаданные схемы.

exp userid=user/[email protected] owner=someowner rows=n file=somefile.dmp 

Если вы открываете файл с помощью блокнота, вы можете видеть утверждения DML. вы можете импортировать с помощью

imp userid=user/[email protected] file=somefile.dmp full=y 

вы можете также скопировать в другую схему на одной и той же БД (обычно для тестирования)

imp userid=user/[email protected] file=somefile.dmp fromuser=someschema touser=otherschema 

вы также можете использовать новый Datapump для параллельных и сжатия усовершенствований. check out this link

Смежные вопросы