2016-05-20 16 views
0

同じ表に同じレコードdonotが存在する場合のみ、表にレコードを挿入します。このようなカーソルでそのテーブルの だから、私が保存されている値: - 今表の内部結合から削除してください - ORA-00933:SQLコマンドが正しく終了していません

cursor note_data is 
     select note_s.nextval, i_user_book_id, i_course_user_id, book_edition_id, book_id, n.role_type_id, page_id, book_page_number, 
         xcoord, ycoord, width, height, share_across_courses, sysdate, i_user_id, description, share_with_students,text 
     from note n, course_user cu 
     where n.course_user_id = cu.course_user_id 
     and  cu.course_id = i_from_course_id; 

が、私は内部使用してテーブルからレコードを削除しますが、このように参加 -

delete n 
from note n 
inner join course_user cu 
on n.course_user_id = cu.course_user_id 
where cu.course_id = i_from_course_id; 

これは削除の実行中声明、私はエラーになっています - 「ORA-00933:SQLコマンドが正常に終了していない」私はテーブルからレコードを削除することができます場合は

、私は、Wi LLこのコードを使用して、同じテーブルにカーソルデータから同じレコードを挿入: -

FOR notecopy IN note_data LOOP 
    insert into note (note_id, user_book_id, course_user_id, book_edition_id, book_id, role_type_id, page_id, book_page_number, 
          xcoord, ycoord, width, height, share_across_courses, date_created, date_updated, created_by, updated_by, description, share_with_students,text) 
    values (note_s.nextval, notecopy.i_user_book_id, notecopy.i_course_user_id, notecopy.book_edition_id, notecopy.book_id, notecopy.role_type_id, notecopy.page_id, notecopy.book_page_number, 
          notecopy.xcoord, notecopy.ycoord, notecopy.width, notecopy.height, notecopy.share_across_courses, sysdate, sysdate, notecopy.i_user_id, notecopy.i_user_id, notecopy.description, notecopy.share_with_students, notecopy.text); 
END LOOP; 

私の目標は、同じレコードが同じテーブルに存在scroll down toパソコンへ転送する場合にのみ、テーブルにレコードを挿入することです。

delete文のエラーを処理する方法を指導し、目標を達成するための正しいアプローチに従うことをお勧めします。そうでない場合は、代わりの方法を提案してください。

おかげ

+0

代わりにMERGEを使用してみませんか?あなたのDB接続がダウンした場合、よりクリーンで安全です。 – PyNoob

+0

@pyNoobは言ったように、このためにMERGEステートメントを使いたいとします。しかしあなたの質問については、あなたは 'DELETE'ステートメントで結合を行うことはできません。代わりに、WHERE句の中に副問合せとして結合を入れることができます。また、なぜノートnから削除するのですか?それを「ノートnから削除する」に変更してください。 – ruudvan

答えて

0
delete from note n 
inner join course_user cu 
on n.course_user_id = cu.course_user_id 
where cu.course_id = i_from_course_id; 

それはノートnから削除する必要があります。

ここではリンク先のマージを使用してください。あなたがそれらを行う方法について質問があるなら、私は答えます。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm

0

あなたはあなたがしているとしてそれが動作する場合、私は言うことができないあなたのテーブル、その列、またはそれらの関係については何も知らない

DELETE 
    FROM (SELECT * 
      FROM NOTE n 
      INNER JOIN COURSE_USER cu 
      ON n.COURSE_USER_ID = cu.COURSE_USER_ID 
      WHERE cu.COURSE_ID = i_from_course_id) 

のように、DELETE FROM (subquery)...という語句これに必要期待していますが、これはOracleで使用される構文です。

これまで言われてきたように、すべてのデータを削除してから再挿入するのではなく、更新または挿入にMERGEを使用することのアドバイスが有効です。

幸運のベスト。

関連する問題