使用Java PreparedStatements设置列别名

使用Java PreparedStatements设置列别名,java,oracle,oracle10g,prepared-statement,Java,Oracle,Oracle10g,Prepared Statement,大家好:)我想用Oracle 10g动态命名我的列。以下是我想做的: SELECT NAME as "User.Name", EMAIL as "User.Email.For.Criteria2.at." || CRITERIA FROM CUSTOMERS WHERE CRITERIA = ? 或: 一些Java在所有参数中循环:(这已经在生产中) 我知道我可以用Java构建查询,但我的限制是要避免部署新的Java代码:/。不过我可以修改SQL。这仅适用于Oracle S

大家好:)我想用Oracle 10g动态命名我的列。以下是我想做的:

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

一些Java在所有参数中循环:(这已经在生产中)

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

最好的问候

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

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


另一种看法是:绑定只能替换值。所以问问你自己:我可以用一个常量表达式来代替bind
,例如
'a'

  • 您可以替换where子句中的
  • 无法替换列别名中的
    ,这将生成无效查询

Aw gosh,我认为只有数据库部分限制了这一点,而不是JDBC进行一些早期编译:/n如果我的内存正确,在设置绑定值之前,将在使用时发送查询进行解析。
SELECT 
  NAME as "User.Name",
  EMAIL as "User.Email.For.Criteria2.at." || ?
FROM CUSTOMERS 
WHERE 
  CRITERIA = ?
ps.setString(i+1, parameterArray[i]);