2012-04-03 27 views
0

的我有兩個表seatinfo(siid,seatno,classid,tsid)booking (bookid,siid,date,status)Oracle查詢錯誤:準確獲取返回多於請求沒有行

我已經輸入參數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; 

回答

2

你是說,你得到一個「ORA-01422:精確取多於行的請求數量更多的回報」,當你同時運行這些查詢的?這似乎不太可能,因爲你包括謂詞rownum <= 1。你是否可以從一個SQL * Plus會話中剪切並粘貼,該會話只在PL/SQL塊中運行這個查詢並生成錯誤?

如果你不是在抱怨你在標題中提到的錯誤,而問題只是你沒有得到你期望的數據,可能的問題是你顯然有一個bookDate參數具有相同的名稱作爲你的表中的一列。這是行不通的。當你說

(to_char(booking.bookdate,'dd-mon-yy'))=(to_char(bookDate,'dd-mon-yy')) 

你大概的意思是到bookDate列的booking表進行比對bookDate參數。但是由於列名優先於局部變量,因此表達式的左側也正在查看booking表中的bookDate列。所以你在比較一個專欄。它將使更多的意義改變參數的名稱(,比方說,p_bookDate),然後寫

booking.bookDate = p_bookDate 

,或者,如果你想要做的比較忽略了日期的時間部分

trunc(booking.bookDate) = trunc(p_bookDate) 
+0

感謝賈斯汀Cave.Yes我得到ORA-01422:精確取返回多於請求的行數」爲兩個查詢ROWNUM <= 1工作在PL/SQL.i've細嘗試這樣做(p_bookDate)其不工作。 。 – 2012-04-03 19:24:23

+0

@AwladLiton你可以定義 「不工作」 – 2012-04-03 19:25:54

+1

@AwladLiton - ?還有,你是什麼意思 「'ROWNUM <= 1'工作正常,在PL/SQL」 如果是 「工作」,T?如果你不會得到一個錯誤,對吧?但是你只是說兩個查詢都有錯誤,每個查詢都有一個'rownum <= 1'子句。 – 2012-04-03 20:48:25

相關問題