无法从前端获取插入表中的最新记录

时间:2015-08-18 12:46:00

标签: sql oracle

我正在尝试从我的表中获取最新插入的记录。我刚刚从前端创建了一个规则,它创建了一个唯一的规则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;

这是我正在执行的查询。

2 个答案:

答案 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。