Propel, Oracle e nomes de tabelas
Nos últimos dias experienciei problemas em utilizar o Symfony com banco de dados Oracle (mais especificamente, em utilizar o Propel com Oracle). O que acontece é que os scripts gerados através do comando propel-build-sql do Symfony, por padrão, ficam da seguinte forma:
CREATE TABLE "estado" ( "id" NUMBER NOT NULL, "nome" VARCHAR2(50), "sigla" VARCHAR2(2) );
MySQL e PostgreSQL não apresentaram problemas. Porém, a inserção deste SQL no Oracle força que todas as tabelas e campos sejam criados na forma de caracteres minúsculos.
Ou seja, se você fizer uma consulta diretamente no banco1 da seguinte forma:
SELECT nome FROM estado;
Receberá um erro informando que a tabela não existe! Apenas nesta forma funcionaria:
SELECT "nome" FROM "estado";
Conseqüentemente, todas as consultas efetuadas através dos objetos de mapeamento do banco geradas pelo Propel não funcionarão. A solução foi simples: remover as aspas duplas do arquivo SQL gerado (utilizei a ferramente rpl do linux):
rpl '"' '' data/sql/*
Uma solução não muito adequada, mas resolveu. Até que resolvi consultar a lista symfony-users sobre o problema e um integrante, Charley Tiggs, sugeriu a seguinte configuração no propel.ini:
propel.disableIdentifierQuoting = trueSimples e funcional. Fica a referência para consultas futuras
1 Sugiro o Oracle SQL Developer, uma ótima ferramenta GUI desenvolvida em Java para acessar bancos em Oracle, MySQL e SQL Server. Sendo uma ferramenta Java, pode ser executada perfeitamente no Linux, como estou utilizando aqui!

Agosto 20th, 2007 at 15:43
Oi Jony,
Ótima dica, obrigada por compartilhá-la!
Passei exatamente pela mesma situação hoje, utilizando o sfGuard com o Oracle. No arquivo SQL gerado além do problema das aspas, a definição dos índices aparecia duplicada e, na primary key, o campo vinha em branco… o jeito foi acertar o SQL manualmente mesmo
Agosto 20th, 2007 at 16:02
Oi Andréia,
Realmente, também tive o mesmo problema do índice no sfGuard, mas atualmente estou “ignorando o erro”, visto que ele duplica a linha mas não afeta em nada, só contabiliza uma instrução com falha.
Um abraço.