Pregunta

Si ejecuto el siguiente SQL usando el desarrollador SQL de Oracle.

select payee_id, to_char(check_date,'d') as DOW,  
(cmcl_bank_cleared - check_date) as DateDiff from AP_Master  
where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=1)  
order by payee_address_zip, DOW, DateDiff  

Funciona bien, sin embargo, cuando intento hacerlo usando Delphi

SQL.Add('select payee_id, to_char(check_date, ' + QuotedStr('d') + ') as DOW, ');
SQL.Add('(cmcl_bank_cleared - check_date) as DateDiff from AP_Master ');
SQL.Add('where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=:DaysParam))');
SQL.Add('order by payee_id, DOW, DateDiff;');

Recibo el mensaje de error "ORA-00933: SQL Ni NOR finalizado correctamente"

¿Fue útil?

Solución

Mira el doble soporte después de los paramáticos. No lo tienes en tu desarrollador SQL SQL. Para evitar que use StackOverflow como un corrector ortográfico Oracle SQL, podría:

  1. Use el editor SQL y pegue el texto de la consulta allí
  2. Use una constante de cadena y asigna en un todo, en lugar de línea por línea

Otros consejos

¿Por qué insistes en hacer esto de la manera difícil? :)

const
  SQLText =   'select payee_id, to_char(check_date, ''d'') as DOW,'#13 +
              '(cmcl_bank_cleared - check_date) as DateDiff from AP_Master'#13 +
              'where (cmcl_bank_cleared is not null)'#13 +
              'AND (cmcl_bank_cleared - check_date >=:DaysParam)'#13 +
              'order by payee_id, DOW, DateDiff'#13;

begin
  MyQuery.SQL.Text := SQLText;
  MyQuery.ParamByName('DaysParam').AsInteger := SomeNumberOfDays;
  try
    MyQuery.Open;
    // Use query results
  finally
    MyQuery.Free;
  end;
end;

Tengo una utilidad que le permitirá seleccionar esto en el IDE y copiarlo en el portapapeles, ejecutar la utilidad y luego pegar directamente en su ventana de consulta de desarrollador SQL (o cualquier otro control de edición). También tengo uno que hace el reverso: selecciona cualquier texto de consulta en el portapapeles, ejecuta la utilidad y luego pegue el código después del const Whatever = Para hacer una constante de cadena Delphi perfectamente formada para usar como se indicó anteriormente (de hecho, lo usé después de limpiar sus declaraciones SQL.Add para asegurarse de que las citas incrustadas fueran correctas).

¿Qué componentes estás usando en Delphi para tu consulta?

Tiene un semi-colon al final de su cadena de cláusula por pedido que causará este error, dependiendo de los componentes que esté utilizando para la consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top