java.sql.sqlException:意外的令牌:FIRST_VALUE

时间:2017-06-05 15:57:20

标签: oracle spring-jdbc jdbctemplate

我正在使用java 6和oracle db以及spring 3.0 jdbcTemplate处理遗留系统。

我尝试执行的查询是:

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 department_id,last_name,salary,FIRST_VALUE(last_name)           超过(按薪水排序ASC ROWS UNBOUNDED PRECEDING)AS ...]

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

1 个答案:

答案 0 :(得分:0)

听起来像是Java 6应用程序实现的客户端版本的问题,早期客户端可能不支持FIRST_VALUE和窗口构造(OVER子句)等指令,因为它们是自9i版本以来并入DBMS的。

当我尝试在Forms6i环境中使用它时,我遇到了诸如select语句中的“无效”CASE条件之类的问题,因为该版本的内置客户端无法解析语句,甚至虽然我正在连接到11g DBMS。

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