Я знаю утверждение:
create table xyz_new as select * from xyz;
Который копирует структуру и данные, но что, если я просто хочу структуру?
sql
oracle
copy
database-table
Андрей
источник
источник
Ответы:
Просто используйте предложение where, которое не будет выделять строки:
Ограничения
Следующие вещи не будут скопированы в новую таблицу:
Это также не обрабатывает разделы
источник
Я использовал метод, который вы приняли, но, как кто-то указал, он не дублирует ограничения (я думаю, за исключением NOT NULL).
Более сложный метод, если вы хотите продублировать всю структуру:
Это даст вам полный текст оператора создания, который вы можете изменить по своему желанию для создания новой таблицы. Вы должны были бы изменить имена таблицы и все ограничения, конечно.
(Вы также можете сделать это в более старых версиях, используя EXP / IMP, но теперь это намного проще.)
Отредактировано для добавления Если таблица, которую вы ищете, находится в другой схеме:
источник
My_table_name
это существующая таблица. Но как мне получить имя моей новой созданной таблицы?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
А пока, пожалуйста, дайте мне знать, что LONG делает здесь.Используя sql developer выберите таблицу и нажмите на вкладку DDL
Вы можете использовать этот код для создания новой таблицы без данных при запуске ее на листе SQL
sqldeveloper - бесплатное приложение от оракула.
Если в таблице есть последовательности или триггеры, ddl иногда будет генерировать их и для вас. Вам просто нужно быть осторожным, в каком порядке вы их делаете, и знать, когда включать или выключать триггеры.
источник
SQL
Чтобы избежать итерации снова и снова и ничего не вставлять, исходя из условия, где 1 = 2
источник
источник
Вы можете сделать это,
Create table New_table as select * from Old_table where 1=2 ;
но будьте осторожны. В таблице, которую вы создаете, нет индексов, Pk и т. Д., Как в old_table.источник
Создайте новую пустую таблицу, используя схему другого. Просто добавьте предложение WHERE, которое заставляет запрос не возвращать данные:
источник
Вы также можете сделать
затем обрежьте таблицу
abc_new
. Надеюсь, этого будет достаточно для вашего требования.источник
Просто напишите запрос как:
где
new_table
- имя новой таблицы, которую вы хотите создать, иold_table
имя существующей таблицы, структуру которой вы хотите скопировать, будет скопирована только структура.источник
WHERE 1 = 0
или подобные ложные условия работают, но мне не нравится, как они выглядят. Маргинально более чистый код для Oracle 12c + ИМХОCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Применяются те же ограничения: только определения столбцов и их обнуляемость копируются в новую таблицу.
источник
Другим способом вы можете получить ddl создания таблицы из команды, указанной ниже, и выполнить создание.
TYPE
естьTABLE
иPROCEDURE
т. д.С помощью этой команды вы можете получить большинство ddl из объектов базы данных.
источник
GET_DDL
чувствительны к регистру.Source_table - это таблица, в которую вы хотите скопировать структуру.
источник
Используя pl / sql developer, вы можете щелкнуть правой кнопкой мыши имя таблицы в рабочей области sql или в проводнике объектов, затем щелкнуть «view» и затем щелкнуть «view sql», который генерирует скрипт sql для создания таблицы вместе со всеми ограничениями. , индексы, разделы и т.д ..
Затем вы запускаете скрипт, используя имя новой_таблицы
источник
копировать без табличных данных
копировать с табличными данными
источник
- Это создаст таблицу и скопирует все данные.
- Это будет иметь ту же структуру таблицы, но все скопированные данные будут удалены.
Если вы хотите преодолеть ограничения, указанные в ответе: Как я могу создать копию таблицы Oracle без копирования данных?
источник
Вышеуказанная задача может быть выполнена в два простых шага.
ШАГ 1:
query
Выше создает дубликат таблицы (с содержанием, а).Чтобы получить структуру, удалите содержимое таблицы, используя.
ШАГ 2:
Надеюсь, это решит вашу проблему. И спасибо предыдущим постам. Дали мне много понимания.
источник
truncate
версия. Помимо выделения экстентов для всех данных, вы не освобождаете их, удаляя, поэтому вы можете тратить пространство впустую, пока таблица не увеличится до старого размера. И вы генерируете отмену / повтор как при вставке, так и при удалении. Ответ Джима очень просто избегает всего этого.