Eu sei a afirmação:
create table xyz_new as select * from xyz;
Que copia a estrutura e os dados, mas e se eu apenas quiser a estrutura?
sql
oracle
copy
database-table
Andrew
fonte
fonte
Respostas:
Basta usar uma cláusula where que não seleciona nenhuma linha:
Limitações
O seguinte não será copiado para a nova tabela:
Isso também não lida com partições
fonte
Eu usei o método que você aceitou muito, mas como alguém apontou, ele não duplica as restrições (exceto NOT NULL, eu acho).
Um método mais avançado se você deseja duplicar a estrutura completa é:
Isso fornecerá o texto completo da instrução de criação que você pode modificar conforme desejar para criar a nova tabela. Você precisaria alterar os nomes da tabela e todas as restrições, é claro.
(Você também pode fazer isso em versões mais antigas usando EXP / IMP, mas agora é muito mais fácil.)
Editado para adicionar Se a tabela que você procura estiver em um esquema diferente:
fonte
My_table_name
é a tabela existente. Mas como faço para criar o nome da minha nova tabela?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
Enquanto isso, por favor, deixe-me saber o que LONG faz aqui.Usando o sql developer, selecione a tabela e clique na guia DDL
Você pode usar esse código para criar uma nova tabela sem dados ao executá-la em uma planilha sql
O sqldeveloper é um aplicativo gratuito da oracle.
Se a tabela tiver seqüências ou gatilhos, o ddl às vezes também os gerará. Você só precisa ter cuidado com a ordem em que os faz entrar e saber quando ativar ou desativar os gatilhos.
fonte
SQL
Para evitar iterar repetidamente e não inserir nada com base na condição em que 1 = 2
fonte
fonte
Você pode fazer isso,
Create table New_table as select * from Old_table where 1=2 ;
mas tenha cuidado. A tabela que você cria da dose não possui nenhum Índice, Pk e assim por diante, como a tabela_ antigafonte
Crie uma nova tabela vazia usando o esquema de outra. Basta adicionar uma cláusula WHERE que faz com que a consulta não retorne dados:
fonte
você também pode fazer um
então trunque a tabela
abc_new
. Espero que isso seja suficiente para sua exigência.fonte
Basta escrever uma consulta como:
onde
new_table
é o nome da nova tabela que você deseja criar eold_table
é o nome da tabela existente cuja estrutura você deseja copiar, isso copiará apenas a estrutura.fonte
WHERE 1 = 0
ou condições falsas semelhantes funcionam, mas não gosto da aparência delas. Um código marginalmente mais limpo para Oracle 12c + IMHO éCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
As mesmas limitações se aplicam: apenas as definições de coluna e sua nulidade são copiadas para uma nova tabela.
fonte
De outra maneira, você pode obter o ddl da criação da tabela no comando listado abaixo e executar a criação.
TYPE
éTABLE
,PROCEDURE
etc.Com este comando, você pode obter a maioria do ddl a partir de objetos de banco de dados.
fonte
GET_DDL
diferenciam maiúsculas de minúsculas.Source_table é a tabela da qual você deseja copiar a estrutura.
fonte
Usando o desenvolvedor do pl / sql, você pode clicar com o botão direito do mouse no nome da tabela na área de trabalho do sql ou no explorador de objetos, clicar em "visualizar" e clicar em "visualizar sql", que gera o script sql para criar a tabela junto com todas as restrições , índices, partições etc.
Em seguida, você executa o script usando o new_table_name
fonte
copiar sem dados da tabela
copiar com dados da tabela
fonte
- Isso criará tabela e copiará todos os dados.
- Isso terá a mesma estrutura de tabela, mas todos os dados copiados serão excluídos.
Se você deseja superar as limitações especificadas pela resposta: Como posso criar uma cópia de uma tabela Oracle sem copiar os dados?
fonte
A tarefa acima pode ser concluída em duas etapas simples.
PASSO 1:
O exemplo
query
acima cria uma duplicata de uma tabela (também com conteúdo).Para obter a estrutura, exclua o conteúdo da tabela usando.
PASSO 2:
Espero que isso resolva seu problema. E graças aos posts anteriores. Deu-me muitas idéias.
fonte
truncate
versão. Além de alocar extensões para todos os dados, você não os liberará ao excluir, portanto, você está potencialmente desperdiçando espaço, a menos que a tabela cresça para o tamanho antigo. E você está gerando desfazer / refazer na inserção e na exclusão. A resposta de Jim simplesmente evita tudo isso.