2012-04-03 6 views
0

の何を要求したよりも、私は2つのテーブルseatinfo(siid,seatno,classid,tsid)booking (bookid,siid,date,status)を持っているよりも返さないフェッチ。オラクルクエリエラー:正確な行

私は、入力パラメータbookDate、v_tsId、v_clsIdをしました。私は返すためにちょうど1行(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を含んでいるので、これはほとんど起こりそうにないようです。この問合せをPL/SQLブロックで実行してエラーを生成するSQL * Plusセッションからカット&ペーストできますか?

タイトルに記載されているエラーについて不平を言っておらず、問題があなたが期待しているデータを取得していないということであれば、おそらく同じ名前の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

ありがとうJustin Cave.Yes私はORA-01422を持っています:正確なフェッチが要求された数より多くの行を返します "両方のクエリでrownum <= 1はPL/SQLで正常に動作しています。これを試しました(p_bookDate) –

+0

@AwladLiton。 "動作していない"と定義できますか? –

+1

@AwladLiton - "rownum <= 1"はPL/SQLで正常に動作していますか?あなたはエラーが発生しないだろう、そうですか?しかし、あなたは、それぞれが 'rownum <= 1'節を持っている両方のクエリがエラーを生成していると言っただけです。 –