从表内连接中删除 - ORA-00933:SQL 命令未正确结束
Posted
技术标签:
【中文标题】从表内连接中删除 - ORA-00933:SQL 命令未正确结束【英文标题】:Delete from table inner join - ORA-00933: SQL command not properly ended 【发布时间】:2016-05-20 13:06:32 【问题描述】:目的是仅当同一表中不存在相同记录时才将记录插入表中。 因此,我将该表的值存储在像这样的游标中:-
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 命令未正确结束'
如果我能够从表中删除记录,我将使用此代码将游标数据中的相同记录插入到同一个表中:-
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;
我的目标是仅当同一表中不存在相同记录时才将记录插入表中。
请指导如何处理删除语句错误,并建议我是否遵循正确的方法来实现目标。如果没有,请提出一些替代方法。
谢谢
【问题讨论】:
为什么不使用 MERGE 呢?如果您的数据库连接中断,它会更清洁、更安全。 正如@pyNoob 所说,您想为此使用 MERGE 语句。但至于您的问题,您不能加入DELETE
声明。您可以将连接作为子查询放在 WHERE 子句中。还有为什么delete n from note n...
?将其更改为delete from note n
。
【参考方案1】:
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 中删除。
使用 Merge 查看此处的链接。如果您对如何做有疑问,我会回答。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm
【讨论】:
【参考方案2】:您需要将其表述为DELETE FROM (subquery)...
,如
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)
对您的表、它们的列或它们的关系一无所知
话虽如此,使用 MERGE 更新或插入而不是删除所有数据然后重新插入的建议可能是有效的。
祝你好运。
【讨论】:
以上是关于从表内连接中删除 - ORA-00933:SQL 命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00933: SQL 命令未正确结束 00933. 00000 - “SQL 命令未正确结束