Queries dinâmicas no PostgreSQL

Em certos casos é necessário criar e executar consultas SQL dinâmicas para mostrar resultados diferentes ou até mesmo melhorar a performance das consultas.

No PostgreSQL a instrução EXECUTE é específica para esta finalidade, executando a string que contém o comando SQL.

Resultados de instruções SELECT são desprezados pelo EXECUTE. Portanto, não há como extrair o resultado de um SELECT criado dinamicamente com uma instrução EXECUTE pura. Porém existem duas formas de obter o resultado do SELECT, com o laço FOR-IN-EXECUTE ou um cursor OPEN-FOR-EXECUTE, que futuramente abordaremos.

Exemplo:

CREATE OR REPLACE FUNCTION instrucaoExecute(table TEXT, col TEXT, newValue TEXT, oldValue TEXT)
RETURNS TEXT AS $$
BEGIN
    -- Equivalente a UPDATE table SET col='newValue' WHERE col='oldValue'
    EXECUTE 'UPDATE '||table||' SET '||col||'='||''''||newValue||''''||' WHERE '||col||'='||''''||oldValue||'''';

    RETURN 'OK';
END;
$$ LANGUAGE 'plpgsql';

-- Chamando a função
SELECT instrucaoExecute('clientes', 'endereco', 'Rua ABC, 123', 'Rua XV de Novembro, 5432');

Até a próxima

Anúncios

Um comentário em “Queries dinâmicas no PostgreSQL

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s