1
resposta

Comando SQL DDL c/uma variável para criação do nome da coluna

  1. A variável "colunaNome" recebe/armazena o "nome do campo" da tabela "CampoEmpresa".
  2. O comando SQL DDL é executado: ALTER TABLE CampoEmpresaColuna ADD COLUMN "colunaNome" VARCHAR(50);
  3. Problema: O comando ADD COLUMN não está criando a coluna com o nome que está armazenado na variável colunaNome. A coluna criada após a execução tem o mesmo nome da variável.

DELIMITER //

CREATE PROCEDURE Sp_CampoAdicional()

BEGIN

-- Variável
DECLARE contador1, contador2 INT DEFAULT 0;
DECLARE colunaNome varchar(50);

-- Tabela CampoEmpresa
CREATE TABLE CampoEmpresa
( cod int auto_increment,
  id_campo_adicional int,
  estabelecimento_id int,
  campo varchar(50),
  primary key(cod));

-- Tabela CampoEmpresaColuna      
CREATE TABLE CampoEmpresaColuna
( cod int auto_increment,
  primary key(cod));

-- Select Into CampoEmpresa
INSERT INTO CampoEmpresa (id_campo_adicional,estabelecimento_id,campo)
     SELECT id_campo_adicional,estabelecimento_id,campo
       FROM Pivot; 

-- Limite CampoEmpresa
SET contador1 =  (SELECT MIN(cod) FROM CampoEmpresa);
SET contador2 =  (SELECT MAX(cod) FROM CampoEmpresa);

-- While p/caminhar nas linhas
WHILE contador1 < contador2 DO

    -- Nome da Coluna
    SET colunaNome = (SELECT campo FROM CampoEmpresa WHERE cod = contador1);

    -- Adição de Coluna
    ALTER TABLE CampoEmpresaColuna
    ADD COLUMN colunaNome VARCHAR(50);

    -- Contador
    SET contador1 = contador1 + 1;

END WHILE;

END;

1 resposta

Olá Cristiano, tudo bem?

Peço desculpas pela demora no retorno.

O comando para criar a nova coluna, esta sendo executado corretamente Cristiano, quando executamos:

ALTER TABLE TABELA
    ADD COLUMN NOMECAMPO VARCHAR(50);

Mesmo que você tenha declarado uma variável com o mesmo nome do campo e passado um valor para ela, o campo será criado com o nome fornecido no comando, como por exemplo NOMECAMPO.

Então, você poderia fornecer mais detalhes do sue ambiente? Qual o banco de dados você está utilizando?

Aguardo o seu retorno!