2017-06-05 25 views
1

我正在使用java 6和oracle db和spring 3.0 jdbcTemplate的遗留系统上工作。java.sql.sqlException:意外的标记:FIRST_VALUE

而我试图执行的查询是:

SELECT department_id, last_name, salary, FIRST_VALUE(last_name) 
    OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS lowest_sal 
    FROM (SELECT * FROM employees WHERE department_id = 90 
    ORDER BY employee_id) 
    ORDER BY department_id, last_name, salary, lowest_sal; 

但我收到以下错误:

值java.sql.SQLException:意外的令牌:FIRST_VALUE在声明中 [SELECT部门, last_name,salary,FIRST_VALUE(last_name) OVER(ORDER BY salary ASC ROWS UNBOUNDED PRECEDING)as ...]

在sql developer中运行相同的查询运行良好。我无能为力。

回答

0

对我来说,像Java 6应用程序所实现的客户端版本的问题,像FIRST_VALUE和窗口构造(OVER子句)之类的说明可能不会在较早的客户端中受支持,因为它们自9i版本以来合并到DBMS 。

当我尝试在Forms6i环境中使用它时,由于该版本的内置客户端无法分析语句,所以我遇到了诸如select语句中的“无效”CASE条件等问题,即使我连接到11g DBMS。

对此的解决方案可能是在您的数据库中创建一个存储过程来检索您的数据,然后从您的应用程序执行并读取结果。