【问题标题】:PL/SQL Error: ORA-00984 Column not allowed herePL/SQL 错误:ORA-00984 此处不允许列
【发布时间】: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。

标签: sql plsql error-handling


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多