Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como usar um IF no mysql? verificar se campo não existir,


pedrodeola

Pergunta

Boa tarde amigos,

preciso de uma ajuda de vocês. estou precisando fazer uma rotina para atualizar um banco de dados, pois preciso adicionar um novo campo em uma tabela, porém preciso que ele verifique antes se este campo existe. bom,, tenho o código abaixo me resulta o valor '1' se o campo existe e valor '0' se ainda não existe, como faço para ele executar um comando caso o valor obtido seja '0'?

Código que possuo

select if( (select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'teste')=0, 1, 0) AS resultado
Código que preciso executar caso obtenha valor '0'
ALTER TABLE `oservico`
ADD COLUMN `valor_cli` VARCHAR(10) NULL

Obrigado a todos.

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Coloque em uma storage procedure.

DELIMITER $$;

DROP PROCEDURE IF EXISTS `meubancodedados`.`inclui_campo`$$

CREATE PROCEDURE `meubancodedados`.`inclui_campo` ()
BEGIN
   declare resultado int unsigned default 0;
   set resultado = (select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'teste');
   if resultado = 0 then
      ALTER TABLE `oservico`
      ADD COLUMN `valor_cli` VARCHAR(10) NULL;
   end if;
END$$

DELIMITER;$$
Nota: Voce compara COLUMN_NAME = 'teste' e inclui ADD COLUMN `valor_cli` VARCHAR(10) NULL. Está certo isso? para executar use
call inclui_campo;

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe, foi erro meu,, ele vai verificar se existe o campo valor_cli caso não exista vai incluir valor_cli.

Não consegui fazer funcionar com oque me passou, esta dando erro de syntax, estou usando mysql 5.0.67

nome do banco = loja_info

nome da tabela = oservico

campo a adicionar caso não exista = valor_cli

Adaptei um pouco este código, porem quando executo ele, o MySql simplesmente trava, fica como se estivesse processando e não termina mais o processo.

DELIMITER @@

DROP PROCEDURE IF EXISTS ajuste;

CREATE PROCEDURE ajuste ()
BEGIN
 declare resultado int unsigned default 0;
   set resultado = (select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'valor_cli');
   if resultado = 0 then
      ALTER TABLE `oservico`
      ADD COLUMN `valor_cli` VARCHAR(10) NULL;
   end if;
END;
@@

DELIMITER;


call ajuste;

Editado por pedrodeola
Link para o comentário
Compartilhar em outros sites

  • 0
Desculpe, foi erro meu,, ele vai verificar se existe o campo valor_cli caso não exista vai incluir valor_cli.

Não consegui fazer funcionar com oque me passou, esta dando erro de syntax, estou usando mysql 5.0.67

nome do banco = loja_info

nome da tabela = oservico

campo a adicionar caso não exista = valor_cli

Adaptei um pouco este código, porem quando executo ele, o MySql simplesmente trava, fica como se estivesse processando e não termina mais o processo.

DELIMITER @@

DROP PROCEDURE IF EXISTS ajuste;

...

END;
@@

DELIMITER;
call ajuste;
Substitua
END;
@@
por
END@@

Link para o comentário
Compartilhar em outros sites

  • 0

Continua da mesma forma.

quando executo o comando "call ajuste;" ele inicia porem trava, já tentei reinstalar o MySql e não fucionou

mas acredito que o problema esta nesta parte do script, pois se eu substituir por um select normal ai funciona

declare resultado int unsigned default 0;
   set resultado = (select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'valor_cli');
   if resultado = 0 then
      ALTER TABLE `oservico`
      ADD COLUMN `valor_cli` VARCHAR(10) NULL;
   end if;

Editado por pedrodeola
Link para o comentário
Compartilhar em outros sites

  • 0

Quando te passei o script pela primeira vez, foi depois de ter testado com sucesso e meu banco é 5.0.37.

Não sei onde pode estar o erro.

Tente colocar crases aqui `INFORMATION_SCHEMA`.`COLUMNS`. aqui `TABLE_NAME` e aqui `COLUMN_NAME`

Tente colocar avisos aqui:

if resultado = 0 then
      ALTER TABLE `oservico`
      ADD COLUMN `valor_cli` VARCHAR(10) NULL;
          SELECT "INCLUIU CAMPO";
   else
         SELECT "não INCLUIU CAMPO";
   end if;

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente o problema esta neste trecho

select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'valor_cli'

pois se eu substituir por uma tabela do banco atual então tudo funciona.

e se executar este script separadamente funciona

não sei se ajuda, mas ASSIM FUNCIONA

select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'valor_cli';

ASSIM TRAVA

declare resultado int unsigned default 0;

set resultado = (select count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'oservico' AND COLUMN_NAME = 'valor_cli');

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui resolver o problema

Muito obrigado pela ajuda Denis, foi de grande valia.

Deixo o script para caso alguém precise.

DELIMITER @@
DROP PROCEDURE IF EXISTS ajuste;
CREATE PROCEDURE ajuste()
BEGIN
IF NOT EXISTS (
    SELECT * FROM information_schema.COLUMNS WHERE
    TABLE_SCHEMA=Database()
    AND TABLE_NAME='oservico'
    AND COLUMN_NAME='valor_cli'
  )
  THEN
      ALTER TABLE `oservico` ADD COLUMN `valor_cli` VARCHAR(10) NULL;
   end if; 
END@@

DELIMITER;


call ajuste;

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...