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 此处不允许列的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00984: 此处不允许列动态 sql

“命令行错误:1 列:698 错误报告 - SQL 错误:ORA-00984:此处不允许列

操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误

更改表,添加列 / ORA-00984:此处不允许列 PLSQL

ORA-00984: 此处不允许列 - 动态 SQL

00984. 00000 - “此处不允许列”