【发布时间】: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