Ir para conteúdo

Arquivado

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

dataset

INSERT com SELECT e NextVal

Recommended Posts

Prezados, boa noite;

 

Preciso fazer um INSERT em uma nova tabela usando o SELECT. Estou usando o PostgreSQL

 

Criei a tabela nova:

CREATE TABLE tabCid (
  codNiv SERIAL, --Chave da Tabela
  codSeq INTEGER, -- Sequencial interno
  codTip INTEGER NOT NULL, -- Tipo de registro
  visOrd INTEGER NOT NULL, -- Ordem para exibir no HTML
  codRel INTEGER, -- Relacionamento entre outras tabelas
  tipNiv VARCHAR(150) NOT NULL, -- Nome da Cidade
  nomRes VARCHAR(60), -- Nome Reduzido da Cidade
  codPend INTEGER NOT NULL, -- Pendente ou não
  carHor INTEGER, -- Código do Pais
  numCre INTEGER, -- Null
  nomObs VARCHAR(150), -- Null
  CONSTRAINT tabCid_pkey PRIMARY KEY(codNiv)
) WITHOUT OIDS;

Agora vou fazer o INSERT nela (tabCid), puxando dados da tabela antiga (Nivel):

Estou fazendo assim:

INSERT INTO tabCid
      SELECT codNiv, codSeq, 1, visOrd, codRel, tipNiv, Null, 0, carHor, Null, Null FROM Nivel WHERE codTip = 64 ORDER BY codRel;

Mas assim tem um problema, ele vai gravar o Sequencial da tabela antiga (Nivel) na tabela nova (tabCid). Então vai iniciar em 12.026

 

Eu gostaria que o Incrementador iniciasse do 1 e fosse aumentando. 1, 2, 3, 4 ...

 

Tentei dar um NextVal no Incrementador da tabela nova (tabCid) na hora de fazer o INSERT assim:

INSERT INTO tabCid
    SELECT (SELECT NextVal('tabcid_codniv_seq')), codSeq, 1, visOrd, codRel, tipNiv, Null, 0, carHor, Null, Null FROM     Nivel WHERE codTip = 64 ORDER BY codRel;
Mas não deu certo.
Como eu faço pra alimentar uma tabela nova com dados de uma tabela antiga, mas não trazer o incrementador da tabela antiga. Usando o Insert com Select.
Espero que eu tenha sido claro.
Agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente sua última solução está correta , o que deu errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aconteceu o seguinte...

 

tabCid.jpg

 

 

Diz que já tem a chave 1

 

O que devo fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela tabcid já tem registros ?

 

Como está a definição desta sequence ?

 

O que retorna a sql

SELECT (SELECT NextVal('tabcid_codniv_seq')), codSeq, 1, visOrd, codRel, tipNiv, Null, 0, carHor, Null, Null FROM Nivel WHERE codTip = 64 ORDER BY codRel

?

 

Atenção que isto pode "andar" a sequence;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela tabCid não tem registros.

 

Ela acabou de ser criada.

 

E quero "andar" a sequence.

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.