目前考虑有如下几种方式及相应问题:
1.select * from tbname where rownum<=10 order by FldName
存在问题:获得的记录并不是排完序后的前10条记录。怀疑是先取的10条,然后对这10条进行的排序。
2.select * from (select * from tbname order by FldName) where rownum<=10
存在问题:用些方式获得的记录集能满足我的要求。
但是却不能通过ADO对该记录结果进行编辑,C++ BUILDER代码如下:
ADOQry->Edit();
ADOQry->FieldByName("STATE")->AsString = "1";
ADOQry->Post();//执行此处失败目前想到的解决方式:1.用2中的SQL语句获得记录集,然后取该记录集中的主健,用主健做该记录的更新操作:
更新方式:(1).SQL语句“UPDATE tbname set STATE='1' where keyfld=keywords”
(2).重新获得记录集:select * from tbname where keyfld=keywords,
然后:
ADOQry->Edit();
ADOQry->FieldByName("STATE")->AsString = "1";
ADOQry->Post();
存在问题:需要有主键
求:1.其他“效率高”的解决方式。
2.我所列的解决方式,如果没有主键该怎么做?
1.select * from tbname where rownum<=10 order by FldName
存在问题:获得的记录并不是排完序后的前10条记录。怀疑是先取的10条,然后对这10条进行的排序。
2.select * from (select * from tbname order by FldName) where rownum<=10
存在问题:用些方式获得的记录集能满足我的要求。
但是却不能通过ADO对该记录结果进行编辑,C++ BUILDER代码如下:
ADOQry->Edit();
ADOQry->FieldByName("STATE")->AsString = "1";
ADOQry->Post();//执行此处失败目前想到的解决方式:1.用2中的SQL语句获得记录集,然后取该记录集中的主健,用主健做该记录的更新操作:
更新方式:(1).SQL语句“UPDATE tbname set STATE='1' where keyfld=keywords”
(2).重新获得记录集:select * from tbname where keyfld=keywords,
然后:
ADOQry->Edit();
ADOQry->FieldByName("STATE")->AsString = "1";
ADOQry->Post();
存在问题:需要有主键
求:1.其他“效率高”的解决方式。
2.我所列的解决方式,如果没有主键该怎么做?
解决方案 »
- 行转列如何操作
- oracle 11g有人使用吗?
- 一个表的ID 到底用什么数据类型好?
- 急救,SELECT中的group by 句子,在线等
- ORACLE中一个简单的异常处理,老大们帮帮忙,在线候着
- 跪地拜求10g的em和lsnrctl的问题
- 在客户端pl/sql 无法处理服务器名的问题:
- Quest的Knowledge Xpert for PLSQL Development问题
- 请问一下,安装oracle的ole db 驱动程序有什么要求,
- ORACLE存储过程怪问题,100分解决再加100分,加100分
- 请问如何找到Oracle数据库中某表某字段包含特定值的某个记录?
- 问个简单的问题 ,我写了个过程a, 如何调用啊,call a ;不对啊
2。做法是对的。
可以取rowid,这个肯定是唯一的
还是添加主键吧?可以用 sequence 生成主键值
2。可以取rowid,这个肯定是唯一的 效率高的办法没有。
我测试了,是可以的
可以比较
select AGIPERSONHIST.* rownum from AGIPERSONHIST ORDER BY AP_AGID asc 和
select AGIPERSONHIST.* rownum from AGIPERSONHIST ORDER BY AP_AGID desc可以使用
select AGIPERSONHIST.* from (select rownum as num from AGIPERSONHIST) t where t.num <= 10;
此外,需要注意的是,你的查询语句需要改为:
select * from (select t.*, t.rowid from tbname t order by FldName) where rownum <=10
这样,你的结果集里就有ROWID了,在Oracle里,ROWID是唯一的,比主键还快!