2016-12-11 13 views
0

テーブルを更新した後に一時テーブルにいくつかの結果を保存したいのですが、複数のエントリを持つカテゴリ/ブックタイプにエラーが表示されます。私は1つのエントリを持つ本のタイプでそれをしようとすると、すべてうまく動作します。誰かが私にこれを修正する方法を教えてもらえますか、私はそれをどうやってやるのかは分かりませんが、フィルタを持たないことと関係があると思います。私はこの複数の行を返すPL/SQLエラー

BEGIN 
    UpdateAdvance('psychology', 100); 
END; 

のようにそれを呼び出すと

DROP PROCEDURE UpdateAdvance; 
CREATE OR REPLACE PROCEDURE UpdateAdvance (
    p_BookType   titles.category%TYPE, 
    p_NewAdvance  advance_temptable.new_advance%TYPE) AS 
    CURSOR titles_cur IS 
    SELECT * 
    FROM titles 
    WHERE category=p_BookType 
    FOR UPDATE OF advance; 
    titles_rec titles_cur%ROWTYPE; 
    v_OldAdvance  titles.advance%TYPE; 
    v_TitleID   titles.title_id%TYPE; 
    v_Title    titles.title%TYPE; 
BEGIN 
    SELECT advance, title_id, title 
    INTO v_OldAdvance, v_TitleID, v_Title 
    FROM titles 
    WHERE category=p_BookType; 

    FOR titles_rec in titles_cur LOOP 
     INSERT INTO advance_temptable VALUES(advance_sequence.nextval, v_TitleID, v_Title, v_OldAdvance, p_NewAdvance); 
      END LOOP; 
    COMMIT; 
END UpdateAdvance; 

私はエラーを取得する:

Error starting at line : 35 in command - 
BEGIN 
    UpdateAdvance('psychology', 100); 
END; 
Error report - 
ORA-01422: exact fetch returns more than requested number of rows 
ORA-06512: at "SYSTEM.UPDATEADVANCE", line 14 
ORA-06512: at line 2 
01422. 00000 - "exact fetch returns more than requested number of rows" 
*Cause: The number specified in exact fetch is less than the rows returned. 
*Action: Rewrite the query or change number of rows requested 

アプライド・ソリューションと、ここでは、私が今働いているものです。

INSERT INTO advance_temptable 
    select advance_sequence.nextval, TitleID, Title, Advance, p_NewAdvance 
    FROM titles 
    WHERE category = p_BookType; 

カーソルなし:あなたがいないのはなぜ

DROP PROCEDURE UpdateAdvance; 
CREATE OR REPLACE PROCEDURE UpdateAdvance (
    p_BookType   titles.category%TYPE, 
    p_NewAdvance  advance_temptable.new_advance%TYPE) AS 
BEGIN 
    INSERT INTO advance_temptable 
    select advance_sequence.nextval, title_id, title, advance, p_NewAdvance 
    FROM titles 
    WHERE category=p_BookType; 
    COMMIT; 
END UpdateAdvance; 

BEGIN 
    UpdateAdvance('psychology', 100); 
END; 
+0

正解を受け入れるだけで十分です。あなたの質問を編集する必要はありませんが、もし必要ならば、問題を混乱させないようにしてください。元の問題と後の編集を明確に区別してください。 StackOverflowの目的は、未来の探求者に質問と回答のコーパスを提供し、あなたの宿題を手助けすることです。 – APC

答えて

1

+0

ありがとう、それは今働いています:) – Annihil8

関連する問題