Este erro ocorre quando existe na clausula where uma coluna de um tipo comparada a um dado de outro. O Oracle não dispararia este erro, pois realizaria cast automático.
select LOCESCRITU, CHCRIACAO, ROMANEIONUMERO, NUMERO, EMISSAOMOV, CLASSE, REPRESENTA, PESSOA, LOCENTREGA, TRANSPORTA, RECURSO, QUANTIDADE, TOTAL, VOLQDE, VOLPESLIQ, VOLPESBRU, cast(null as number) as VALFRETE from PEDIDO where pedido.TIPOOPERACAO is null and pedido.ECOTACAO is null and pedido.ROMANEIONUMERO = 181
Neste caso, o campo "pedido.ROMANEIONUMERO" é do tipo character varying (VARCHAR) e o dado após o sinal de igual é do tipo integer.
Erro: The SGBD returned an error: ERROR: operator does not exist: character varying = integer LINE 8: and pedido.ROMANEIONUMERO = 181 ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. Local: TiPostgresDBConnection.InternalSQLExecute SQL expression: select LOCESCRITU, CHCRIACAO, ROMANEIONUMERO, NUMERO, EMISSAOMOV, CLASSE, REPRESENTA, PESSOA, LOCENTREGA, TRANSPORTA, RECURSO, QUANTIDADE, TOTAL, VOLQDE, VOLPESLIQ, VOLPESBRU, cast(null as number) as VALFRETE from PEDIDO where pedido.TIPOOPERACAO is null and pedido.ECOTACAO is null and pedido.ROMANEIONUMERO = 181
Como o próprio hint do erro já sugere, para resolver o problema, é necessário igualar os tipos de dados.
__includeOnce('ufs:/ngin/iquery.js'); var sql = IQuery.from(-2008879000 /* Pedidos ou Provisões */) .where([ {field: 'TIPOOPERACAO', operator:'=', value: null}, 'and', {field: 'ECOTACAO', operator:'=', value: null}, 'and', {field: 'ROMANEIONUMERO', operator:'=', value: 181} // observe que 181 aqui é numérico, mas o iquery identifica o tipo e coloca na query como texto ]) .column([ {field: 'LOCESCRITU'}, {field: 'CHCRIACAO'}, {field: 'ROMANEIONUMERO'}, {field: 'NUMERO'}, {field: 'EMISSAOMOV'}, {field: 'CLASSE'}, {field: 'REPRESENTA'}, {field: 'PESSOA'}, {field: 'LOCENTREGA'}, {field: 'TRANSPORTA'}, {field: 'RECURSO'}, {field: 'QUANTIDADE'}, {field: 'TOTAL'}, {field: 'VOLQDE'}, {field: 'VOLPESLIQ'}, {field: 'VOLPESBRU'}, {castValue: null, cast: 'number', alias: 'VALFRETE' } ]) .toSql();
__includeOnce('ufs:/goog/string/string.js'); var romaneionumero = 181; var query = 'SELECT locescritu, chcriacao, romaneionumero, numero, emissaomov, classe,' + ' representa, pessoa, locentrega, transporta, recurso, quantidade,' + ' total, volqde, volpesliq, volpesbru, Cast(NULL AS NUMBER) AS VALFRETE ' + 'FROM pedido ' + 'WHERE pedido.tipooperacao IS NULL ' + ' AND pedido.ecotacao IS NULL ' + " AND pedido.romaneionumero = '%s' "; database.query(goog.string.format(query, romaneionumero));
var query = 'SELECT locescritu, chcriacao, romaneionumero, numero, emissaomov, classe,' + ' representa, pessoa, locentrega, transporta, recurso, quantidade,' + ' total, volqde, volpesliq, volpesbru, Cast(NULL AS NUMBER) AS VALFRETE ' + 'FROM pedido ' + 'WHERE pedido.tipooperacao IS NULL ' + ' AND pedido.ecotacao IS NULL ' + " AND CAST(pedido.romaneionumero AS INTEGER) = 181 "; database.query(query);