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