SQL oracle - 如何从列中获取最大值,添加一个,格式化它并与更多值连接
SQL oracle - how to get max from column, add one ,format it and concat with more values
我目前正在尝试创建一个查询,该查询必须从列中获取最大值,加一 (+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: invalid number of
arguments
这条线有问题。
(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;
我目前正在尝试创建一个查询,该查询必须从列中获取最大值,加一 (+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: invalid number of arguments
这条线有问题。
(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;