Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KhaosDoctor

Criando Select para Create Table

Recommended Posts

Olá pessoal,

 

Preciso criar um select que formará a string para uma query que irá criar todas as tabelas do banco de dados, um dump, porém o usuário irá ver o código para gerar a tabela.

 

 

O que eu montei até agora foi algo assim:

SELECT
'CREATE TABLE ' ||table_name|| '(' ||column_name|| ' ' ||data_type|| '(' ||data_length|| ') ' ||CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE 'NULL' END|| ');'
FROM all_tab_columns c
WHERE rownum <10000 AND owner = 'GTP';

 

Porém isso vai me retornar um CREATE TABLE para cada coluna da tabela:

CREATE TABLE ADM_COMPANY(ID_COMPANY_PK NUMBER(22) NOT NULL);

 

Eu queria que o primeiro select executasse algum tipo de LOOP para cada coluna e adicionasse dentro do escopo do CREATE para que ele montasse o CREATE normalmente:

CREATE TABLE table_name (
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable
);


CREATE TABLE table_name (
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable,
column type(length) nullable
);

 

Porém não sei como inserir este escopo, o final é o mais complexo porque preciso procurar as constraints, no momento realizei este select para pegar as informações que eu precisava:

SELECT c.CONSTRAINT_NAME, c.COLUMN_NAME, c.TABLE_NAME from all_cons_columns c, user_constraints b where c.OWNER = 'GTP' AND c.CONSTRAINT_NAME = b.CONSTRAINT_NAME AND b.CONSTRAINT_TYPE = 'P' AND c.TABLE_NAME NOT LIKE 'BIN%' ORDER BY C.COLUMN_NAME;

 

Porém não sei como vou juntar com a tabela no final, se alguém tiver uma luz ai eu agradeço.

 

Valeu!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, porém eu preciso que este código seja gerado e mostrado para o cliente, a aplicação é um DB Manager que deve mostrar o código de criação de todos os objetos dentro dele, porém o META do Oracle não está ajudando, ele puxa muito lixo de dentro do sistema, inclusive chaves e coisas desnecessárias que não funcionam se a query for feita na mão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem , a DICT (

 

select * from dict

 

)

 

dá todas as tabelas do metadados

 

 

ele puxa muito lixo de dentro do sistema

 

como assim ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguns metadados vem com queries a mais, como, por exemplo, inserção de foreign keys e tudo mais, porém consegui resolver pegando valores ja existentes em um sistema antigo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.