【问题标题】:Oracle SQL SAVEPOINT problemsOracle SQL SAVEPOINT 问题
【发布时间】:2020-03-29 09:05:48
【问题描述】:

我目前正在学习 Oracle SQL 课程,但遇到了 SAVEPOINT 和 ROLLBACK 问题。 这是说 SAVEPOINT 和 ROLLBACK 语句在 vs 代码中附近有无效的语法,而 APEX 是说 SAVEPOINT 语句是未知的。如果我删除代码周围的语句,它似乎可以修复错误,但似乎我应该能够在一个文件中完成整个分配。至少这是他们想要的。我的教授似乎也被难住了,所以我希望你们能帮助我,我对编码和 SQL 还很陌生。这是我的代码:

       /*These statements create indexes*/
       CREATE INDEX CD_NUMBER_TRACK_LISTINGS_IDX
       ON D_TRACK_LISTINGS(CD_NUMBER);

       CREATE UNIQUE INDEX EMAIL_D_CLIENTS_IDX
       ON D_CLIENTS(EMAIL);

       CREATE INDEX TITLE_ARTIST_D_SONGS_IDX
       ON D_SONGS(TITLE,ARTIST);
       /* transaction statements*/
       SAVEPOINT one;
       DELETE TITLE
       FROM D_SONGS
       WHERE TITLE = "All These Years";
       INSERT INTO D_SONGS(ID, TITLE, DURATION, ARTIST, TYPE_CODE)
       VALUES(60, "Happy Birthday Sunshine", "4 min" , "The Sunsets", 88);
       ROLLBACK TO SAVEPOINT one
       COMMIT;

       SAVEPOINT two;
       INSERT INTO D_CDS
       VALUES (100, "Best of Rock and Roll", "Old Town Records", "2004");
       INSERT INTO D_CDS
       VALUES (99, "Party Music", "Old Town Records", "2004");
       INSERT INTO D_CDS
       VALUES (98, "Holiday Tunes for All Ages", "Tunes are Us", "2004");
       INSERT INTO D_CDS
       VALUES (97, "Celebrate the Day", "R and B Inc.", "2003");
       COMMIT;


       SAVEPOINT three;
       UPDATE D_EVENTS
       SET NAME = "Employee Training";
       ROLLBACK TO SAVEPOINT three;
       /* explain statements*/
      EXPLAIN PLAN   
         SET STATEMENT_ID = 'myPlan'  
         FOR  
         SELECT ID, TITLE, DURATION, ARTIST
         FROM D_SONGS
         WHERE EXISTS
            (SELECT DESCRIPTION
            FROM D_TYPES
            WHERE DESCRIPTION = 'Jazz' OR DESCRIPTION = 'Pop');

【问题讨论】:

  • 这是delete tablename(或者如果你真的喜欢打字,delete from tablename)——没有列列表。此外,字符串文字用单引号括起来,而不是双引号。我不确定索引和explain plan 与您的问题有什么关系。
  • 第一次 ROLLBACK 后也缺少分号。
  • 在现实生活中你只需调试它。从 1 条语句开始,执行,如果失败则修复,撤消,添加语句,执行所有内容,如果失败则修复,撤消,重复直到完成。如果您编写一个包含多个错误的较大脚本,您将收到之前引用一些错字的意外错误。这样做你会找出问题所在:缺少分号、错误的 DELETE 语法、错误的引号等。

标签: sql oracle oracle-apex


【解决方案1】:

回滚语句存在问题。

必须是rollback to <savepoint name>SAVEPOINT 关键字不是必需的。

在你的情况下,应该是:

ROLLBACK TO three; -- or one or two

干杯!!

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多