首页 > 解决方案 > SQL oracle - 如何从列中获取最大值,添加一个,格式化它并与更多值连接

问题描述

我目前正在尝试创建一个查询,该查询必须从列中获取最大值,添加一个(+1)并在左侧使用 N 个零对其进行格式化,直到九个位置。

我已经尝试了很多在 H2 数据库中有效但在 Oracle 中不一样的查询

INSERT INTO XXX.YYY(X,Y,Z) 
VALUES 
(CONCAT(:X, :Y, (LPAD((SELECT nvl(max(Z),0) + 1 FROM XXX.YYY),9,'0'))), 
(LPAD((SELECT nvl(max(Z),0) + 1 FROM XXX.YYY),9,'0')),
 :Z)

这向我抛出了以下错误:

java.sql.SQLSyntaxErrorException:ORA-00909:参数数量无效

标签: sqloracleh2

解决方案


这条线有问题。

(CONCAT(:X, :Y, (LPAD((SELECT nvl(max(Z),0) + 1 FROM XXX.YYY),9,'0'))),

Oracle 不允许超过 2 个参数。使用管道代替 Concat 运算符 ( ||)

(:X || :Y || (LPAD((SELECT nvl(max(Z),0) + 1 FROM XXX.YYY),9,'0')), 

此外,您可以使用以下方法更好地查询INSERT INTO .. SELECT

INSERT INTO XXX.YYY(X,Y,Z) 
select :X || :Y || (LPAD(nvl(max(Z),0) + 1 ,9,'0')),
(LPAD(nvl(max(Z),0) + 1 ,9,'0')),
:Z from XXX.YYY;

推荐阅读