PL/SQL 错误:ORA-00984 此处不允许列
Posted
技术标签:
【中文标题】PL/SQL 错误:ORA-00984 此处不允许列【英文标题】:PL/SQL Error: ORA-00984 Column not allowed here 【发布时间】:2020-04-13 05:12:44 【问题描述】:我正在编写一个用于循环的游标,以从表 A 中检索部分数据并将其插入到表 B 中。当我运行我的代码时,我收到此错误:
这是我正在使用的代码:
CREATE TABLE New_Movie (
ID INTEGER NOT NULL,
title VARCHAR2(100),
yr NUMBER(4,0),
score NUMBER,
votes INTEGER,
director VARCHAR2(100),
CONSTRAINT New_Movie_PK PRIMARY KEY (id));
DECLARE
counter INTEGER;
CURSOR c_movie IS
SELECT ID, title, yr, score, votes, director
from movie
where votes >= 50000;
BEGIN
counter := 0;
for n_movie IN c_movie
LOOP
counter := counter+1;
dbms_output.put_line(counter|| 'rows have been inserted');
INSERT INTO New_Movie VALUES(id, title, yr, score, votes, director);
END LOOP;
EXECUTE IMMEDIATE 'COMMIT';
END;
【问题讨论】:
尝试在 INSERT 中使用VALUES(n_movie.ID,n_movie.title,...
顺便说一句,作为最佳实践,每个insert
语句都应包含列列表。 PL/SQL 也有自己的 commit
语句,所以你不需要动态 SQL。
【参考方案1】:
你可以试试这个
INSERT INTO New_Movie
VALUES(n_movie .id,
n_movie.title,
n_movie.yr,
n_movie.score,
n_movie.votes,
n_movie.director);
【讨论】:
【参考方案2】:在插入语句中,您应该在每列的开头写n_movie。
CREATE TABLE New_Movie (
ID INTEGER NOT NULL,
title VARCHAR2(100),
yr NUMBER(4,0),
score NUMBER,
votes INTEGER,
director VARCHAR2(100),
CONSTRAINT New_Movie_PK PRIMARY KEY (id));
DECLARE
counter INTEGER;
CURSOR c_movie IS
SELECT ID, title, yr, score, votes, director
from movie
where votes >= 50000;
BEGIN
counter := 0;
for n_movie IN c_movie
LOOP
counter := counter+1;
dbms_output.put_line(counter|| 'rows have been inserted');
INSERT INTO New_Movie VALUES(n_movie.id, n_movie.title, n_movie.yr, n_movie.score, n_movie.votes, n_movie.director);
END LOOP;
EXECUTE IMMEDIATE 'COMMIT';
END;
【讨论】:
以上是关于PL/SQL 错误:ORA-00984 此处不允许列的主要内容,如果未能解决你的问题,请参考以下文章
“命令行错误:1 列:698 错误报告 - SQL 错误:ORA-00984:此处不允许列
操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误