如何从列中获取max,添加一个,格式化它并使用更多值concat

t0ybt7op  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(294)

我正在尝试做一个查询,它必须从一列中获取最大值,添加一个(+1)并在左侧用n个零格式化它,直到9个位置。
我尝试过很多在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:参数数无效

8yparm6h

8yparm6h1#

这条线有问题。

(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;

相关问题