Jump to content
Fórum Script Brasil
  • 0

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


pedrodeola

Question

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.

Edited by Denis Courcy
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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;

Edited by pedrodeola
Link to comment
Share on other 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 to comment
Share on other 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;

Edited by pedrodeola
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...