One of the things to try in cases like this is the equivalent Java code. It
turns out that doesn't seem to work either, which means JSP/JSTL isn't the
issue. I tried the following on our own database with various Oracle
drivers (9.2.0.5 and 10.2.0.1 to name a couple):
import java.io.*;
import java.sql.*;
import java.util.*;
public class ParamTest {
private static final String DRIVER_CLASSNAME = "oracle.jdbc.OracleDriver";
private static final String DB_URL = "jdbc:oracle:thin:@...";
private static final String DB_USER = "...";
private static final String DB_PASSWORD = "...";
private static final Properties DB_PROPS = new Properties();
static {
DB_PROPS.setProperty("user", DB_USER);
DB_PROPS.setProperty("password", DB_PASSWORD);
}
private static final String SQL = "select owner, table_name from
all_tables order by ?";
// try this as "owner", "table_name" or "xxx"
// can also try an Integer instead
private static final String ORDER_BY = "owner";
public static void main(String[] args) throws Exception {
Class driverClass = Class.forName(DRIVER_CLASSNAME);
Driver driver = (Driver)driverClass.newInstance();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = driver.connect(DB_URL, DB_PROPS);
stmt = conn.prepareCall(SQL);
stmt.setObject(1, ORDER_BY);
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println("Owner: " + rs.getObject(1) + ", Table
name: " + rs.getObject(2));
}
} catch (SQLException exc) {
exc.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException exc) {
exc.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException exc) {
exc.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException exc) {
exc.printStackTrace();
}
}
}
}
}
Interestingly, if you try something similar with either the jTDS or
Microsoft SQL Server drivers (against an SQL Server database), you get an
error trying to use a param for "order by".
Francis wrote:
> Impossible to sort a select in sql:query with an "order by ?" and
> sql:param with Oracle.
>
>
> SELECT id_agent, nom, prenom, no_ulis, no_bureau, prof_telephone,
> serv_principal FROM perso.per_v_agent_opencms
> WHERE NVL( perso.per_v_agent_opencms.date_fin_contrat ,
> TO_DATE('01/01/2100','DD/MM/YYYY')) > SYSDATE
> ORDER BY ?
>
>
>
> I try with truc=nom or truc=2.
> The var truc is tested with c:out.
> With "ORDER BY nom" or "ORDER BY 2" in the select the query is in order
> Another test with a where clause "nom like ?" and value="${truc}%" /> is working with correct value of truc.
> The JSP page is working but without sort.
> If the text in the var truc is "xxx" it's also working without error and
> sort.
>
> Why?
>
> Francis
--
Kris Schneider
D.O.Tech
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org