使用Java PreparedStatements设置列别名

时间:2013-02-12 13:55:39

标签: java oracle oracle10g prepared-statement

Hello all :)我想用Oracle 10g动态命名我的列。这就是我想做的事情:

SELECT 
  NAME as "User.Name",
  EMAIL as "User.Email.For.Criteria2.at." || CRITERIA 
FROM CUSTOMERS 
WHERE 
  CRITERIA = ?

或者:

SELECT 
  NAME as "User.Name",
  EMAIL as "User.Email.For.Criteria2.at." || ?
FROM CUSTOMERS 
WHERE 
  CRITERIA = ?

使用Java循环所有参数:(已经在生产中)

ps.setString(i+1, parameterArray[i]);

我知道我可以用Java构建查询,但我的约束是要避免部署新的Java代码:/。我可以修改SQL。这仅适用于Oracle SQL吗?

祝你好运

1 个答案:

答案 0 :(得分:2)

列名(别名)在SQL中是静态的,必须在分析时(绑定之前)知道。这允许一些工具在执行查询之前知道列的数量,它们的名称和类型。

因此,您无法动态命名列别名。


另一种看待它的方法:绑定只能替换值。所以问问自己:我可以用例如?的常量表达式替换绑定'A'吗?

  • 您可以替换where子句中的?
  • 您无法替换列别名中的?,这会产生无效的查询。