Oracle 好的,我试着把一个rownum转换成一个变量,但我需要它只给我一个值,所以如果它是行中的第二个数字,则为2
尝试这样做,但给出的值太多 如果我做p_snum=snum,它将继续返回1。如果它在等待名单上是2,我需要它返回2Oracle 好的,我试着把一个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
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>