Se quiser ir direto à solução, acesse:
http://www.activedelphi.com.br/forum/viewtopic.php?t=40660
1ª Parte: O Problema
Um colega de profissão, Leonardo, me mandou um e-mail nestes últimos dias, com a seguinte situação:
Migrar do SQL Server para PostgreSQL. Porém usa-se extensivamente storeds procedures, sendo necessário usar o TZStoredProc para facilitar esta migração.
Problema: Ao executar a Stored Procedure dá a seguinte mensagem de erro: unssuported function.
Ambiente: Delphi 7, ZeosLib 6.5.1, PostgreSQL 8.2
Pois bem, este assunto estava na fila já faz tempo e resolvi encarar o problema de frente.
Pergunta: Da onde vem esta mensagem?
Nos fontes do Zeos, procurei a mensagem de erro. Fui encontrar em ZMessages, sendo que ele alimenta uma variável chamada SUnsupportedOperation.
Daí corri atrás da SUnsupportedOperation e vi que ela é usada em vários lugares, a fim de gerar exceptions, em especial, nas operações não suportadas, ou seja, nas que ainda não foram implementas.
Abaixo um print do Call Stack até chegar na mensagem de erro:
Outra coisa interessante é que os parâmetros (no caso os de input) não seguiram em frente também.
Afunilando mais ainda, percebi que o problema está em CreateCallableStatement, presente na classe TZAbstractConnection. As classes descendentes desta, precisam reescrever este método, do contrário ela gera o exception. E isso não foi feito em TZPostgreSQLConnection, declarada em ZdbcPostgreSql.
Logo...
O TZStoredProc não serve para nada em relação ao PostgreSQL.
2ª Parte: A solução para quem usa a versão 6.6.1
A partir da versão 6.6.1, tudo o que escrevi aqui na parte de cima virou passado, mas continou sendo problemático usar a TZStoredProc com o PostgreSQL.
Neste meio tempo o Leonardo postou esta dúvida no fórum do Active Delphi e o Marcos Thomaz disponibilizou um componente que ele desenvolveu, o TZFunction.
Acompanhe o tópico:
http://www.activedelphi.com.br/forum/viewtopic.php?t=40660
Link para o componente TZFunction:
http://ube-167.pop.com.br/repositorio/28488/meusite/ZFunction.zip
Por enquanto é isto.
Devo voltar neste assunto nos próximos tópico.