Transact-SQL

por Walter Cruz on 28/07/2006
in PostgreSQL, SQL Server

Terminei o último texto com essa frase: "uma função que levou um pouco mais de uma hora para ser feita em php (e em python) levou um dia inteiro para ser feita em Transact-SQL".

Pois bem. a história não acabou por aí. Devido a umas questões de arredondamento e ponto flutuante, a função em Transact-SQL não retornava o resultado esperado. Como solução, implementamos a mesma em python (como havia sido feita desde o começo). Como estou com python 2.3 e o pymssql requer o python 2.4, o acesso ao banco foi feito por um webservice em PHP, sendo acessado pelo cliente python. Não consegui me entender com o ZSI e fazer um webservice funcionar no mod_python. Mas a implementação está funcionando.

Mas trabalhar com o Transact-SQL foi um desafio! Primeiro: uma procedure (função que não retorna nada) e uma function (função que retorna alguma coisa) são tratadas de formas diferente. Na primeira posso usar raiseerror, na segunda, não. Outros problemas:

  • Não existe algo do tipo "CREATE OR REPLACE FUNCTION" - preciso apagá-la e recriá-la novamente, sempre.
  • Não existe loop FOR - a única estrutura de LOOP existente é o WHILE.
  • A atribuição de variáveis é feia, devido à ausência de um operador diferente para comparar e atribuir. Assim, temos:
  IF (LEN(@letras) = 1) //comparação
  SET @temp = '999'; // atribuição
 

Nem preciso dizer que durante o desenvolvimento eu esquecia de praticamente todos os SETS.

Horrível. Horrível. A sintaxe do PL/PgSQL é bem melhor. Até a do MySQL acho que é melhor.

UPDATE 05/01/2007: Parece que o Nando andou tendo seu quinhão de dor de cabeça com o SQL Server recentemente