2015-06-24 9:24 GMT-03:00 PAULO <pa...@visualpsistemas.com.br>: > EXECUTE 'SELECT '|| ufCliente ||' INTO resultado FROM cfop WHERE > cod_cfop = '||'p_cfop'; > > RETURN resultado; >
Dois erros: 1. O INTO que você quer é parte do EXECUTE, não do SELECT (da forma como fez, executaria, mas criaria uma tabela chamada "resultado", o que não é o que queres); 2. O valor da variável p_cfop deve ser embutido no comando. Ambos os erros são relacionados. Basicamente, o que está no escopo da função PL/pgSQL não está visível no comando dentro do EXECUTE. O que recomendo pra você é: 1. Coloque o SQL numa variável, assim facilita debugar e evita erros como esse; 2. Use a função format para usar identificadores; 3. Use a cláusula USING para passar parâmetros. Seguindo isso, o comando ficaria: DECLARE v_sql text; ... v_sql := format('SELECT %I FROM cfop WHERE cod_cfop = $1', ufCliente); RAISE NOTICE 'SQL: %', v_sql; -- não necessário, só para visualizar EXECUTE v_sql INTO resultado USING p_cfop; RETURN resultado; ... De qualquer forma, eu recomendo fortemente você repensar seu esquema. Não seria melhor ter uma tabela com (cod_cfop, uf, valor), assim não precisaria de consulta dinâmica, poderia usar diretamente: SELECT c.valor INTO resultado FROM cfop c WHERE c.cod_cfop = p_cfop AND c.uf = ufCliente; Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral