J'ai le petit script Groovy suivant qui fait juste le nombre de lignes dans la base de données pour une date spécifique.Comment utiliser PL/SQL to_date avec une variable dans Groovy?
import groovy.sql.Sql
def today= new GregorianCalendar()
def dateString = "${today.get(Calendar.MONTH)+1}/${today.get(Calendar.DAY_OF_MONTH)-1}/${today.get(Calendar.YEAR)}"
def sql = Sql.newInstance("jdbc:oracle:thin:bc/[email protected]:1521:billctr", "bc","bc", "oracle.jdbc.OracleDriver")
def sqlLine = "select count(id) as count from bc_payment where trunc(paymentdate) = to_date(${dateString}, \'MM/DD/YYYY\')"
println(sqlLine)
def payCount = sql.execute(sqlLine)
println payCount
to_date nécessite Si je les laisse guillemets simples autour de la date où vous passez. Off, je reçois SQLException: Invalid column type
mais si je mets \ » autour de la variable, je reçois un avertissement de Groovy
WARNING: In Groovy SQL please do not use quotes around dynamic expressions (which start with $) as this means we cannot use a JDBC PreparedStatement and so is a security hole. Groovy has worked around your mistake but the security hole is still there. The expression so far is: select count(id) as count from bc_payment where trunc(paymentdate) = to_date('?', 'MM/DD/YYYY')
Y a-t-il une meilleure façon de le faire sans to_date ou en formatant la variable différemment? Je suis nouveau à Groovy donc toutes les suggestions sont les bienvenues. Merci d'avance!
Je pense que vous avez besoin d'une instance java.sql.Date afin de la comparer à une colonne Date sans horodatage. –
Merci Christoph, je pense que je l'ai réparé. –