我有两张表seatinfo(siid,seatno,classid,tsid)
和booking (bookid,siid,date,status)
。
我输入参数bookDate,v_tsId,v_clsId。我需要一行(bookid)才能返回。此查询无效。我不知道为什么。我该如何解决?
select bookid
into v_bookid
from booking
where (to_char(booking.bookdate,'dd-mon-yy'))=(to_char(bookDate,'dd-mon-yy'))
and status=0
and rownum <= 1
and siid in(select siid
from seatinfo
where tsid=v_tsId
and classid= v_clsId);
我也试过这个:
select bookid
into v_bookid
from booking,
seatinfo
where booking.siid=seatinfo.siid
and (to_char(booking.bookdate,'dd-mon-yy'))=(to_char(bookDate,'dd-mon-yy'))
and booking.status=0
and rownum <= 1
and seatinfo.tsid=v_tsId
and seatinfo.classid= v_clsId;
答案 0 :(得分:2)
当你运行这两个查询时,你是说你得到“ORA-01422:确切的提取返回超过请求的行数”?由于您包含谓词rownum <= 1
,因此这似乎不太可能。您可以从在PL / SQL块中仅运行此查询的SQL * Plus会话中剪切和粘贴并生成错误吗?
如果你没有抱怨你在标题中提到的错误,而问题只是你没有得到你期望的数据,可能的问题是你显然有一个bookDate
参数,与表中的列相同的名称。那不行。当你说
(to_char(booking.bookdate,'dd-mon-yy'))=(to_char(bookDate,'dd-mon-yy'))
您可能想要将bookDate
表中的booking
列与bookDate
参数进行比较。但由于列名优先于局部变量,因此表达式的左侧也会查看bookDate
表中的booking
列。所以你要将一个列与自己进行比较。更改参数的名称(比如p_bookDate
)然后写
booking.bookDate = p_bookDate
或者,如果你想进行比较,忽略日期的时间成分
trunc( booking.bookDate ) = trunc( p_bookDate )