您的位置:首页 > 数据库 > Oracle

Oracle 中返回最大值和返回前几个较大值(TOP10)问题一解

2006-07-16 16:30 549 查看
Oracle 中返回最大值和返回前几个较大值(TOP10)问题一解

需返回最大的编号(主键)加1实现自己加操作

1.使用触发器

CREATE SEQUENCE seqmyTableSNO ;
create table myTable
(
cost1number(10,2),
cost2number(10,2),
cost3number(10,2),
snointeger constraint pk_myTable primary key
);

CREATE TRIGGER myTable_b BEFORE INSERT
ON myTable FOR EACH ROW
BEGIN
select seqmyTableSNO.nextval into :new.sno from dual;
END;

这是网上找的其它人的方法,未经测试。

2.而我们用的是在程序中绑定修改,即先调用返回再进行加1插入。现将程序代码写下。

ReturnMaxID()
{
string sqlCommand = "SELECT NVL(MAX(ID),0) " +
"FROM Table1 " ;
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
}

//说明:
MAX函数:取表中某列中的最大值。
NVL:空值转换,
NVL(VALUE,SUBSTITUTE)即如果VALUE的值为空(NULL),则该语句值为SUBSTITUTE,否则为VALUE

3.被PK掉的方法。

本是用DESC对(ID)列进行排序处理按(DESC),然后返回首行首列。
些方法经使用完全OK,只是代码太长,被老师一看就PK了,我还想了那么久。

关于TOP10的实现方法。

此类方法的主要实现手法是:
按照选定的条件,将选中的列按某一关键列进行排序,选中前十个的值。

public DataSet GetTop10()
{
//DataConnection...
string sqlCommand = "SELECT * FROM" +
"(SELECT ID,Top , ROWNUM NO FROM Table1 " +
"ORDER BY Top DESC)" +
"WHERE NO <= 10 ";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
return db.ExecuteDataSet(dbCommand);
}

//语意说明:将ID,Top两列选出,并将按DESC的方式,对Top列进行排序。RowNum取出前十个值。
RowNum:限制输出为几个记录
示例:
select Title from Book_sorted
where Rownum < 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: