UCASE和UPPER sql函数

时间:2016-06-11 15:27:06

标签: java oracle oracle11gr2

我正在尝试执行以下查询:

String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";

在使用servlet访问数据库的示例中 但我收到错误消息:

Excepcion java.sql.SQLSyntaxErrorException: ORA-00904: "UCASE": invalid identifier 

另一方面,当我使用UPPER sql函数时,该示例有效,但结果不会以大写形式显示LASTNAME列的值。我不明白会发生什么。

3 个答案:

答案 0 :(得分:3)

您只是比较大写字母值,但是您使用probeid genename sample1 sample2 sample3 ....n 1565483_at EGFR 4.231305 3.845882 4.182973 1565484_x_at EGFR 4.412553 4.279467 4.035834 201983_s_at EGFR 4.24823 4.304888 7.686607 201984_s_at EGFR 5.273041 4.914405 6.332343 210984_x_at EGFR 4.591761 4.807462 5.830411 211550_at EGFR 3.822476 4.055447 3.668374 211551_at EGFR 4.082551 3.825106 4.292482 211607_x_at EGFR 4.774399 4.566751 5.694684 224999_at EGFR 4.059136 4.307745 7.19947 201746_at TP53 7.847832 4.011214 7.834738 211300_s_at TP53 7.043846 4.881257 7.619734

选择实际值

答案 1 :(得分:1)

要获得结果集中的大写名称,您需要在选择列表中使用UPPER,而不是UCASE,如下所示:

String query = "SELECT UPPER(LAST_NAME) AS UPPERNAME, * FROM EMP WHERE UPPER(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";

您的代码在这里做的是构建一个名为query的查询字符串。一旦query完成,它将被发送到数据库进行解析和运行。

在构建对数据库的查询时,必须使用内置数据库函数来处理数据库要解析和运行的部分查询。因此,在您的示例中,Java正在toUpperCase上执行lastName,然后将该文本放入将转到数据库的查询字符串中。 UPPER(LAST_NAME)按原样进入查询字符串,它将像这样传递到数据库并由数据库运行。所以它需要是一个数据库可以解析和运行的函数:Oracle函数,而不是Java函数。

答案 2 :(得分:1)

UCASE是DB2函数,而不是Oracle。对于Oracle,您需要使用UPPER

您的问题的第二部分已经由James Z回答了。

话虽如此,我之所以要回答,是因为先前的回答并未指出您列出查询方式的SQL注入问题。

养成始终使用jdbc执行参数化查询的习惯,而不是直接将值附加到查询字符串中。

String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) LIKE ? ";

您的参数应为-lastName.toUpperCase()+"%"

SQL Injection