当前位置: 首页 > 知识库问答 >
问题:

从表内部联接中删除-ORA-00933:SQL命令未正确结束

沈德寿
2023-03-14

目的是仅当同一个表中不存在相同的记录时,才将记录插入表中。所以,我将该表的值存储在如下游标中:-

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; 

我的目标是,仅当同一个表中不存在相同的记录时,才将记录插入表中。

请指导如何处理delete语句错误,并建议我采用正确的方法来实现目标。如果没有,请建议一些替代方法。

谢谢

共有2个答案

单于亮
2023-03-14

您需要将其短语为DELETE BY(子查询)...,如

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更新或插入而不是删除所有数据然后重新插入的建议可能是有效的。

祝你好运。

颛孙霖
2023-03-14
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

 类似资料:
  • 我试图从MySQL移动到Oracle和我的一个查询最初看起来像这样 然而,当我在ORACLE中运行同一个查询时,只做了一个小改动。。。 它给了我以下错误: SQL错误:ORA-00933:SQL命令未正确结束00933。00000-“SQL命令未正确结束” Oracle SQL Developer工具强调了声明部分的一个问题 作为t1 我读了一些其他的问题,提到在Oracle语句的某些部分周围放置

  • 我遇到了一个甲骨文错误, ORA-00933:SQL命令未正确结束 有以下几点。 我在每个语句末尾的“/”前面加了分号。 有什么建议我可能错了吗?

  • 我正在尝试创建一个where子句作为参数传递给Oracle命令,事实证明这比我想象的要困难得多。我想做的是根据应用程序中的用户输入创建一个大型where查询。其中query是语句的单个参数,并且将包含多个and、OR条件。但这里的代码并不完全符合我的要求: 如果我将下面的行更改为我想要的结果类型,那么我会得到一个错误"ORA-00933:SQL命令未正确结束": 我的问题是,如何在不导致此错误的情

  • 我试图使用骆驼路线中的MyBatis插入列表批处理将数据列表插入到表中。批处理失败,例外java.sql.批处理更新异常: ORA-00933:SQL命令未正确结束(下面有更多详细信息)。 我能够插入MyBatis API中没有问题的数据列表(参见本文第6节),但只有在骆驼路线上使用时,它才会失败 查询很好(请参阅本文中的5.SQL客户机查询),因为我能够成功地从SQL客户机插入数据。我尝试了几种

  • 线程“main”java.SQL.sqlsyntaxerrorexception:ORA-00933:SQL命令未正确结束 我怀疑我们不能为Oracle查询提供“as employees_data”,那么我做错了什么?

  • 我试图在Laravel 4.2中使用Oracle作为后端执行更新命令,如下所示。每当我尝试这样做时,我都会出错 我该如何解决这个问题,我错在哪里?谢谢你的建议。