选择表中没有行的列的最大值
我正在使用oracle数据库
在表中插入行时,我需要找到列的最大值并将其加1,然后在我插入的行中使用该值。
INSERT INTO dts_route
(ROUTE_ID, ROUTE_UID, ROUTE_FOLDER)
VALUES (
(SELECT MAX(ROUTE_ID) + 1 FROM route) ,
ROUTE_UID,
ROUTE_FOLDER)
如果它们至少是表中的一项,则此方法可以正常工作。 但当表中没有条目时返回 null。
当表中没有条目时,如何获得默认值 1。
I am using oracle database
While inserting a row in a table, i need to find the max value of a column and increment it by 1, and use that value in row i am inserting.
INSERT INTO dts_route
(ROUTE_ID, ROUTE_UID, ROUTE_FOLDER)
VALUES (
(SELECT MAX(ROUTE_ID) + 1 FROM route) ,
ROUTE_UID,
ROUTE_FOLDER)
This works fine if their is at least one entry in table.
But returns null when their are no entries in table.
How can i get default value of 1 when their are no entries in table.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这不是创建自动增量字段的安全方法。您可以使用 Oracle 序列来实现此目标。
至于 null,您可以使用
NVL
给出默认值(例如 0),以防函数返回 null。This is not a safe way of creating an auto-increment field. You can use an Oracle sequence to achieve this goal.
As for the null, you can use
NVL
to give a default value (say, 0) in case the function returns null.使用 ID 序列。您需要创建序列。请参阅下面的链接
http://www.basis.com/onlinedocs/documentation/b3odbc/ sql_sequences.htm
Use sequence for the ID. You need to create sequence. See below link
http://www.basis.com/onlinedocs/documentation/b3odbc/sql_sequences.htm
使用:
...但是您确实应该使用 sequence 用连续数字填充值价值:
...
Use:
...but you really should be using a sequence to populate the value with a sequential numeric value:
...
设置默认值为 NULL,
但如果您不介意路线 ID 中的奇怪间隙,则使用序列可能会更容易
Set a default for NULL
though using a sequence might be easier if you don't mind the odd gaps in your route ids
当 null 时选择 0,那么它将是 0+1,与 null+1 相比,这是一个正确的数字
SELECT isnull(MAX(ROUTE_ID),0) + 1 FROM Route
select 0 when null, then it will be 0+1 which is a correct number compared to null+1
SELECT isnull(MAX(ROUTE_ID),0) + 1 FROM route
如果您担心路由 ID 中存在间隙,请使用 NOCACHE 子句创建序列:
请注意,这会影响性能,因为 Oracle 现在必须在每次增加序列时“提交”。
If you are concerned about there being gaps in your route ids then create the sequence with the NOCACHE clause:
Note that there is a performance hit because Oracle now has to "commit" each time you increment the sequence.