[firebase-br] Alter Table

claudio em americasoft.com.br claudio em americasoft.com.br
Qui Mar 2 15:17:33 -03 2006


Cara, acho que assim vai funcionar.
Cria uma tabela temporaria com a mesma estrutura da sua tabela atual e joga
todos os dados nela.
Dropa a sua tabela e recria como not null no campo desejado.
Pega todos os dados da tabela temporaria e manda pra ela novamente.
Dropa a temporaria.
Seria mais ou menos assim:

*/
CREATE TABLE TEMPORARIO
(
  FIL_ORIGEM VARCHAR(3) NOT NULL,
  NRO_MINUTA NUMERIC(7, 0) NOT NULL,
  TPO_OPERACAO CHAR(1) NOT NULL,
  EMISSAO TIMESTAMP,
  ENTREGA TIMESTAMP,
  REMETENTE VARCHAR(18),
  CONSIGNATARIO VARCHAR(18),
  NAVIO VARCHAR(26),
  AGN_MARITIMA VARCHAR(40),
  LOC_RETIRADA VARCHAR(40),
  LOC_DEVOLUCAO VARCHAR(40),
  NRO_CONTAINER VARCHAR(18),
  TAM_CONTAINER CHAR(1),
  VLR_CONTAINER NUMERIC(15, 2),
  KGS_CONTAINER NUMERIC(15, 3),
  CTO_DOCUMENTO VARCHAR(2),
  CTO_FILIAL VARCHAR(3),
  CTO_NUMERO NUMERIC(7, 0),
  OBSERVACOES VARCHAR(120),
  STATUS CHAR(2),
  DT_ALTERACAO TIMESTAMP,
  PORTO VARCHAR(40),
  TRM_RETIRADA VARCHAR(10),
  TRM_DEVOLUCAO VARCHAR(10),
  NRO_RESERVA VARCHAR(15),
  LACRES VARCHAR(40),
  VEICULO VARCHAR(8),
  FIL_ORDPGTO VARCHAR(3),
  NR_ORDPGTO DOUBLE PRECISION,
  DT_ORDPGTO TIMESTAMP,
  FRT_COMBINADO NUMERIC(15, 2),
  PRODUTO VARCHAR(20),
  MOTORISTA VARCHAR(18),
  OPERADOR VARCHAR(20),
  ISS_ORDPGTO NUMERIC(15, 2)
);

COMMIT;

UPDATE STWOPETMINC SET TPO_OPERACAO = 'D' WHERE TPO_OPERACAO = '' OR
TPO_OPERACAO IS NULL;

COMMIT;

INSERT INTO TEMPORARIO
    SELECT * FROM STWOPETMINC;

COMMIT;

DROP TABLE STWOPETMINC;

COMMIT;

CREATE TABLE STWOPETMINC
(
  FIL_ORIGEM VARCHAR(3) NOT NULL,
  NRO_MINUTA NUMERIC(7, 0) NOT NULL,
  TPO_OPERACAO CHAR(1) NOT NULL,
  EMISSAO TIMESTAMP,
  ENTREGA TIMESTAMP,
  REMETENTE VARCHAR(18),
  CONSIGNATARIO VARCHAR(18),
  NAVIO VARCHAR(26),
  AGN_MARITIMA VARCHAR(40),
  LOC_RETIRADA VARCHAR(40),
  LOC_DEVOLUCAO VARCHAR(40),
  NRO_CONTAINER VARCHAR(18),
  TAM_CONTAINER CHAR(1),
  VLR_CONTAINER NUMERIC(15, 2),
  KGS_CONTAINER NUMERIC(15, 3),
  CTO_DOCUMENTO VARCHAR(2),
  CTO_FILIAL VARCHAR(3),
  CTO_NUMERO NUMERIC(7, 0),
  OBSERVACOES VARCHAR(120),
  STATUS CHAR(2),
  DT_ALTERACAO TIMESTAMP,
  PORTO VARCHAR(40),
  TRM_RETIRADA VARCHAR(10),
  TRM_DEVOLUCAO VARCHAR(10),
  NRO_RESERVA VARCHAR(15),
  LACRES VARCHAR(40),
  VEICULO VARCHAR(8),
  FIL_ORDPGTO VARCHAR(3),
  NR_ORDPGTO DOUBLE PRECISION,
  DT_ORDPGTO TIMESTAMP,
  FRT_COMBINADO NUMERIC(15, 2),
  PRODUTO VARCHAR(20),
  MOTORISTA VARCHAR(18),
  OPERADOR VARCHAR(20),
  ISS_ORDPGTO NUMERIC(15, 2)
);

ALTER TABLE STWOPETMINC ADD CONSTRAINT OPEMINC_FILIALNRO_PK PRIMARY KEY
(FIL_ORIGEM, NRO_MINUTA, TPO_OPERACAO);

COMMIT;

INSERT INTO STWOPETMINC
    SELECT * FROM TEMPORARIO;

COMMIT;

Nesse exemplo acima eu tive que alterar a chave primaria de uma tabela.
Espero que ajude.



Cláudio Anderson de Araújo Prudente
Analista/Desenvolvedor de Sistemas
claudio em americasoft.com.br
----- Original Message ----- 
From: "Allsoft - GMail" <allsoft.inf em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, March 02, 2006 12:44 PM
Subject: Re: [firebase-br] Alter Table


Cláudio,

Eu fiz este teste, mas só funciona para o IBExpert, quando rodo um script,
por exemplo no IBOConsole não funciona.

Obrigado pela sua atenção,

[]
Jorge Lauand
----- Original Message ----- 
From: <claudio em americasoft.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, March 01, 2006 4:33 PM
Subject: Re: [firebase-br] Alter Table


Cara, eu fiz um teste pelo ibexpert mudando o campo endreco na mao para not
null de uma tabela chamada CLIENTES e ele me deu a seguinte select.

update RDB$RELATION_FIELDS set
RDB$NULL_FLAG = 1
where (RDB$FIELD_NAME = 'ENDERECO') and
(RDB$RELATION_NAME = 'CLIENTES')

Cláudio Anderson de Araújo Prudente
Analista/Desenvolvedor de Sistemas
claudio em americasoft.com.br
----- Original Message ----- 
From: "Allsoft Informatica" <allsoft.inf em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, March 01, 2006 4:15 PM
Subject: Re: [firebase-br] Alter Table


A alteração que quero fazer é simplismente mudar o campo para NOT NULL, a
fim de gerar uma chave primária com este campo. Sei que manualmente através
de IBExpert ou IBConsole é possível fazer esta alteração, mas quero que
funcione por intermédio de um script.

Valeu,

Jorge
----- Original Message ----- 
From: "Magno" <magnoscosta em bol.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, March 01, 2006 4:04 PM
Subject: Re: [firebase-br] Alter Table


Olha.. posso estar fanlando besteira...
Mas...
alterar colunas vai influenciar se vc tiver dados, de qual tipo é para qual
tipo vai.... se a conversão nao da problema, segundo.. pelo que eu vejo no
IBExpert, ele nao deixa alterar uma coluna se esta estiver implicita em
alguma procedure, view, triguer, etc etc,  ou seja se ela nao estiver sendo
requisitada em nenhum local...
ai ele deixa vc alterar a coluna... creio q para fazer essa alteração via
codigo funcione dos mesmo modo...

Magno

----- Original Message -----
From: "Allsoft Informatica" <allsoft.inf em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, March 01, 2006 2:21 PM
Subject: Re: [firebase-br] Alter Table


Samuel,

Obrigado pela dica, mas será que existe algum erro na linguagem do banco,
pois deveria funcionar o comando direto para alterar as colunas.

[]
Jorge


----- Original Message -----
From: "samuel ferreira" <samuel.peres.ferreira em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, March 01, 2006 1:42 PM
Subject: Re: [firebase-br] Alter Table


ola

nao sei se é o 'politicamente correto', mas (inclusive vi isso aqui)

Alter Table ACOMP add anummm varchar(15);
update acomp set anummm =  anum;
alter table acomp drop anum;
 Alter Table ACOMP add anum varchar(15) not null;
 update acomp set anum =  anummm;
alter table acomp drop anummm


observe que isso nao vai funcionar se algum registro contiver null no campo
anum. se o campo anum pertencer a uma view ou indice, devem ser excluidas e
depois recriadas.

samuel
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa




______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista