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