Oracle 好的,我试着把一个rownum转换成一个变量,但我需要它只给我一个值,所以如果它是行中的第二个数字,则为2

Oracle 好的,我试着把一个rownum转换成一个变量,但我需要它只给我一个值,所以如果它是行中的第二个数字,则为2,oracle,plsql,Oracle,Plsql,尝试这样做,但给出的值太多 如果我做p_snum=snum,它将继续返回1。如果它在等待名单上是2,我需要它返回2 select rownum into v_rownum from waitlist where p_callnum=callnum order by sysdate; 差点就成功了。在第一次选择中遇到问题。我想我可能不得不用v_计数来代替。也可以按Sysdate排序,即使相隔一秒也可以正确排序 select rn into v_rownum

尝试这样做,但给出的值太多

如果我做p_snum=snum,它将继续返回1。如果它在等待名单上是2,我需要它返回2

   select rownum into v_rownum
    from waitlist
    where p_callnum=callnum
        order by sysdate;
差点就成功了。在第一次选择中遇到问题。我想我可能不得不用v_计数来代替。也可以按Sysdate排序,即使相隔一秒也可以正确排序

 select rn into v_rownum
from (select callnum, 
    row_number() over (order by sysdate) rn
    from waitlist)
where p_snum=snum;
顺便说一句,时间=我使用sysdate将人员输入等待列表的日期。所以我想按时间点餐可以奏效

创建表等待列表 斯努姆·瓦尔查23, callnum编号8, 时间日期, 约束fk_waitlist_snum外部键编号引用studentssnum, 约束fk_waitlist_callnum foreign keycallnum references schclassescallnum, 主键num,callnum ;


是等待列表表。

oracle中的rownum是一个生成的列,它不引用任何特定的行,它只是集合中的第n行

如果选择,则只能返回一行,因此会出现两行多错误,因此rownum将始终为1

如果没有更多关于表结构的详细信息,以及如何唯一地标识记录,就很难为您提供进一步的解决方案

我使用Scott的DEPT表创建了您的等待列表;部门编号表示CALLNUM列:

如何获取您需要的数据

使用分析函数ROW_NUMBER,通过CALLNUMs对值进行排序,您将知道顺序 该查询将用作主查询的内联视图,主查询返回任何CALLNUM的waitlist中的number 以下是方法:

SQL> select * From waitlist;

   CALLNUM WAITER
---------- --------------------
        10 ACCOUNTING
        20 RESEARCH
        30 SALES
        40 OPERATIONS

按系统日期订购?sysdate对于所有行都是相同的,因为它只是当前时间,所以您根本没有对行进行排序。等待列表上的2是什么意思?哪个列指示使您考虑行秒的顺序?选择…只有当返回的行数正好为1时,INTO才起作用。因此rownum将始终返回1,这是没有意义的-您可以使用1而不是query。所以我不能使用子查询?如果只是使用SNUM CallNum和Sysdate,我想我必须使用count才能获得等待列表编号。该表按sysdate.time-date排序。大体上但这些都是等待名单表上的日期。我只需要在等待名单表中找到一个学生的名字。这很有意义。我可以按sysdate排序,其中P_snum=snum来获取行中的数字。好的,所以我尝试将其转换为plsql。我想把它放到v_rownum里从select callnum中选择rn到v_rownum,从p_snum=snum的等待列表中选择按sysdate rn排序的订单上的行数`这非常接近。只需要在snum=p_snum;这很好,但我无法将其放入变量中。如果您无法使其工作,请在此处发布的第一条消息中编辑您的问题,提供创建表并插入示例数据,解释您希望从中获得的结果。因为,我不知道SNUM是什么,也不知道你应该怎么做。
SQL> select * From waitlist;

   CALLNUM WAITER
---------- --------------------
        10 ACCOUNTING
        20 RESEARCH
        30 SALES
        40 OPERATIONS
SQL> select rn
  2  from (select callnum,
  3               row_number() over (order by callnum) rn
  4        from waitlist
  5       )
  6  where callnum = 30;

        RN
----------
         3

SQL>