Criando Select para Create Table
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!
Discussão (4)
Carregando comentários...