选择表中没有行的列的最大值

cha*_*ged 5 sql oracle insert oracle10g

我正在使用oracle数据库

在表中插入行时,我需要找到列的最大值并将其递增1,并在我插入的行中使用该值.

INSERT INTO dts_route 
   (ROUTE_ID, ROUTE_UID, ROUTE_FOLDER)
VALUES (
                        (SELECT MAX(ROUTE_ID) + 1 FROM  route) ,
                        ROUTE_UID,
                        ROUTE_FOLDER)
Run Code Online (Sandbox Code Playgroud)

如果它们是表中的至少一个条目,则此方法正常.但是当它们在表中没有条目时返回null.

如果表中没有条目,我怎么能得到默认值1.

cod*_*nix 13

SELECT COALESCE(MAX(ROUTE_ID),0) ...
Run Code Online (Sandbox Code Playgroud)

  • @changed必须使用这种方法警告您在具有并发性的系统中获得重复值的风险.风险与并发交易的数量成正比.我警告你,因为它看起来正是你想要避免的. (9认同)

Ily*_*gan 11

这不是创建自动增量字段的安全方法.您可以使用Oracle序列来实现此目标.

对于null,您可以使用NVL在函数返回null的情况下给出默认值(例如,0).

  • +1,我希望我可以多次投票.MAX(键)+ 1是一个错误,低效的解决方案. (7认同)