2016-12-04 8 views
0

エラーが発生し続けるORA-01422:正確なフェッチでは、要求された数以上の行が戻されます。 ORA-06512:「CM420A07.ZIP_CODE_SALES_WINNER」の6行目です。何が問題になるのか正確に把握することはできません。エラーが発生し続けるORA-01422、ORA-06512

CREATE OR REPLACE FUNCTION ZIP_CODE_SALES_WINNER 
    RETURN VARCHAR 
IS 
    zipWinner VARCHAR2(5); 
BEGIN 
    SELECT C.zip_code INTO zipWinner 
    FROM SALE S JOIN CUSTOMER C 
    ON S.cust_ID = C.cust_ID 
    GROUP BY C.zip_code 
    HAVING COUNT(*) = (
    SELECT MAX(COUNT(*)) 
    FROM SALE S JOIN CUSTOMER C 
    ON S.cust_ID = C.cust_ID 
    GROUP BY C.zip_code); 
    RETURN zipWinner; 
END; 
/
SELECT ZIP_CODE_SALES_WINNER FROM DUAL; 
+1

、あなたはmysqlを使って質問にタグを付けました –

+0

https://www.techonthenet.com/oracle/errors/ora01422.php – Cyclonecode

+0

あなたがリンクしているウェブサイトはこれを処理するためのカーソルを作成するように言います。 –

答えて

0

クエリで複数の値が返されます。

複数のがちょうど1行だけを取得するには、クエリにROWNUM = 1を追加している場合に選択される郵便番号気にしない場合:

Oracleを使用しているようなあなたのエラーコードが鳴り
SELECT zip_code INTO zipWinner FROM (
SELECT C.zip_code 
    FROM SALE S JOIN CUSTOMER C 
    ON S.cust_ID = C.cust_ID 
    GROUP BY C.zip_code 
    HAVING COUNT(*) = (
    SELECT MAX(COUNT(*)) 
    FROM SALE S JOIN CUSTOMER C 
    ON S.cust_ID = C.cust_ID 
    GROUP BY C.zip_code)) 
    WHERE rownum =1; 
+0

私はそれが1つの値だけを返す方法について混乱していると思います。 –

+0

同じカウント(*)を持つ2つ(またはそれ以上)の郵便番号を持っている場合はどうすればいいですか?気にしない場合は、クエリにrownum = 1を追加するだけです。 – arturro

+0

@RandyGilman rownum = 1は悪い習慣です。あなたがそれを使うべきだと思うなら、あなたの質問に何かが欠落している、または根本的に欠陥があることを意味するためではありません。再考して書き直す。 – GurV

関連する問題