我正在使用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中运行相同的查询运行正常。我无能为力。
答案 0 :(得分:0)
听起来像是Java 6应用程序实现的客户端版本的问题,早期客户端可能不支持FIRST_VALUE和窗口构造(OVER子句)等指令,因为它们是自9i版本以来并入DBMS的。
当我尝试在Forms6i环境中使用它时,我遇到了诸如select语句中的“无效”CASE条件之类的问题,因为该版本的内置客户端无法解析语句,甚至虽然我正在连接到11g DBMS。
解决方法可能是在您的数据库中创建一个存储过程来检索您的数据,然后执行并从您的应用程序中读取结果。