Utilizo em várias aplicações o comando CASE do MySQL com variáveis globais (ex.: [glo_ano_num]) para identificar qual ano a consulta deverá mostrar.
Isso funcionava normalmente na versão 7.0, mas após atualizar para as versões 7.1 e 8, esse erro começou a ocorrer.
Surge uma mensagem pupup do scriptcase após inserir o CASE no SQL da aplicação, pedindo para que envie o erro à Netmaker.
O interessante que também utilizo o CASE na cláusula WHERE desta mesma consulta, não dá erro e o valor da variável global é retornado, mas o CASE dentro da SELECT não retorna o valor da global [glo_ano_num].
SELECT
id,
codigo_meta_id,
valor_ano1,
valor_ano2,
valor_ano3,
valor_ano4,
CASE [glo_ano_num]
WHEN 1 THEN valor_ano1
WHEN 2 THEN valor_ano2
WHEN 3 THEN valor_ano3
WHEN 4 THEN valor_ano4
END AS valor_ano_aux,
momento_id,
descricao_meta,
descricao_regiao,
codigo_objetivo,
enunciado,
codigo_programa,
titulo_programa,
nome_tiporegiao,
nome_unidade_medida,
sigla_unidade_medida,
codigo_orgao,
nome_orgao,
sigla_orgao,
caracterizacao,
periodo_meta_regionalizada,
execucao_meta,
analise_meta_regionalizada
FROM
view_metas_objetivo_regionalizadas_analise
WHERE codigo_orgao = [glo_unidade] AND momento_id = [glo_momento] AND (periodo_meta_regionalizada = [glo_periodo] OR periodo_meta_regionalizada IS NULL) AND (CASE [glo_ano_num]
when 1 then valor_ano1
when 2 then valor_ano2
when 3 then valor_ano3
when 4 then valor_ano4
END) > 0
Erro na aplicação com debug:
(pdo-mysql): select count(*) from view_metas_objetivo_regionalizadas_analise where codigo_orgao = 30550 AND momento_id = 6 AND (periodo_meta_regionalizada = 25 OR periodo_meta_regionalizada IS NULL) AND (CASE 4 when 1 then valor_ano1 when 2 then valor_ano2 when 3 then valor_ano3 when 4 then valor_ano4 END) > 0
(pdo-mysql): SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valor_ano2, valor_ano3, valor_ano4, nome_unidade_medida, sigla_unidade_medida, CASE [glo_ano_num] WHEN 1 THEN valor_ano1 WHEN 2 THEN valor_ano2 WHEN 3 THEN valor_ano3 WHEN 4 THEN valor_ano4 END as valor_ano_aux, periodo_meta_regionalizada, execucao_meta, analise_meta_regionalizada, codigo_objetivo from view_metas_objetivo_regionalizadas_analise where codigo_orgao = 30550 AND momento_id = 6 AND (periodo_meta_regionalizada = 25 OR periodo_meta_regionalizada IS NULL) AND (CASE 4 when 1 then valor_ano1 when 2 then valor_ano2 when 3 then valor_ano3 when 4 then valor_ano4 END) > 0 order by codigo_orgao asc, codigo_programa asc, codigo_objetivo asc LIMIT 0,17
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[glo_ano_num] WHEN 1 THEN valor_ano1 WHEN 2 THEN valor_ano2 ’ at line 1
ADOConnection._Execute(SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valo..., false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valo..., false) % line 222, file: adodb-pdo_mysql.inc.php
ADODB_pdo_mysql.SelectLimit(SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valo..., 17, 0, false, 0) % line 241, file: adodb-pdo.inc.php
ADODB_pdo.SelectLimit(SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valo..., 17, 0) % line 763, file: slide_metas_objetivos_regionalizadas_grid.class.php
slide_metas_objetivos_regionalizadas_grid.inicializa() % line 98, file: slide_metas_objetivos_regionalizadas_grid.class.php
Atenção
Erro ao acessar o banco de dados
SelectLimit(SELECT codigo_orgao, nome_orgao, codigo_programa, titulo_programa, enunciado, descricao_meta, descricao_regiao, valor_ano1, valor_ano2, valor_ano3, valor_ano4, nome_unidade_medida, sigla_unidade_medida, CASE [glo_ano_num] WHEN 1 THEN valor_ano1 WHEN 2 THEN valor_ano2 WHEN 3 THEN valor_ano3 WHEN 4 THEN valor_ano4 END as valor_ano_aux, periodo_meta_regionalizada, execucao_meta, analise_meta_regionalizada, codigo_objetivo from view_metas_objetivo_regionalizadas_analise where codigo_orgao = 30550 AND momento_id = 6 AND (periodo_meta_regionalizada = 25 OR periodo_meta_regionalizada IS NULL) AND (CASE 4 when 1 then valor_ano1 when 2 then valor_ano2 when 3 then valor_ano3 when 4 then valor_ano4 END) > 0 order by codigo_orgao asc, codigo_programa asc, codigo_objetivo asc, 17, 0)