SQL查询有时不返回值

本文关键字:返回值 查询 SQL | 更新日期: 2023-09-27 18:07:01

我在Oracle数据库中有一个表,它有一个ID和一个日期,代表一年中的各个时期。

现在,我有一个c#代码来选择表的最后一个周期:

  public static Period Get_Last_Period()
    {
        DataRow dr = Get_DataRow_InLineSQL("SELECT * FROM PERIODS WHERE ROWNUM = 1 ORDER BY PERIOD_ID DESC");
        Period iPeriod = new Period(dr);
        return iPeriod; 
    }

问题是有时它会随机返回DataRow的"null"值。知道为什么会这样吗?

SQL查询有时不返回值

从表中随机选择一条记录。WHERE ROWNUM = 1作为唯一的标准告诉dbms只选择任何记录并停在那里。然后,您按照没有作用的period_id对这条记录排序,因为当然不能更改单行的排序顺序。

如果有时查询返回一个空记录,这意味着在你的表中有一个空记录,dbms碰巧选择了这个。就是这样。

如果您希望先进行排序,然后选择数字最高的行,您应该将查询更改为:

SELECT * FROM (SELECT * FROM PERIODS ORDER BY PERIOD_ID DESC) WHERE ROWNUM = 1

编辑:因为它是你的c#代码产生空值,我上面的答案是不正确的,但它可能是相关的。什么是经期?它是一个类,它有一个构造函数获取一个DataRow。据我所知,构造函数要么失败,但随后会得到一个异常,要么生成一个实例,但它永远不会为空。所以:不,我不知道这里发生了什么。也许上面的解释对查询进行排序可以帮助您了解构造函数对它获得的DataRow做了什么。