我正在尝试从我的表中获取最新插入的记录。我刚刚从前端创建了一个规则,它创建了一个唯一的规则ID。现在的问题是,当我试图获取从表创建的最新规则ID时,我无法获得最新创建的规则。
创建的最新版本是4676,但是当我尝试查询时,我得到4675.我正在执行下面的查询。无论如何我可以通过表格的索引找到最新的记录,因为当我做最大值它会带来915的东西,因为9是一个比4更大的数字。
select * from mstcatrule where idrule = '4676'
select * from mstcatrule where rowid in (select max(rowid) from mstcatrule)
SELECT *
FROM (select * from mstcatrule ORDER BY rowid DESC) mstcatrule
WHERE rownum <= 3
ORDER BY rownum;
这是我正在执行的查询。
答案 0 :(得分:0)
将数字存储在VARCHAR字段中并不是一件好事。但是,如果您只是寻找具有最高idrule的行,并且该字段确实是所有数字,您可以执行以下操作:
select *
from (
select *
from mstcatrule
order by to_number(idrule) desc nulls last
)
where rownum = 1;
答案 1 :(得分:0)
ROWID并没有随着时间的推移而增长。所以你可以依靠MAX。除此之外,您应该记住数据库是多用户系统,因此其他人可以在插入后插入。因此,基于来自序列的代理id的解决方案也无济于事。
我可以建议使用returning
子句:
insert into my_table(...)
values(...)
returning rowid into l_rowid;
然后你可以:
select * from my_table
where rowid = l_rowid;
但这仅适用于PL / SQL,因此您可能需要编写过程来包装插入内容。
另一种方法是在此表的每个行触发器上插入后创建,这将把rowid保存到包全局变量中。并且您始终可以获得最后一次插入会话行的ROWID。