Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 循环错误游标_Sql_Oracle_Plsql - Fatal编程技术网

Sql 循环错误游标

Sql 循环错误游标,sql,oracle,plsql,Sql,Oracle,Plsql,我正在尝试编写将插入到表中的游标,但收到错误,需要帮助。我收到的错误是ORA-06550 DECLARE CURSOR cur_rating IS SELECT bc.name, bc.title, bc.checkoutdate, bc.returneddate, b.categoryname,b.publisher, ba.authorname FROM bookshelf_checko

我正在尝试编写将插入到表中的游标,但收到错误,需要帮助。我收到的错误是ORA-06550

    DECLARE
    CURSOR cur_rating IS
           SELECT bc.name, bc.title, bc.checkoutdate, bc.returneddate,    
               b.categoryname,b.publisher, ba.authorname
               FROM bookshelf_checkout bc INNER JOIN bookshelf b
               ON bc.title = b.title
               INNER JOIN bookshelf_author ba
               ON bc.title = ba.title
               FOR UPDATE NOWAIT;
            lv_totdays_num NUMBER(4) := 0;
            lv_rating_txt VARCHAR2(2);
    BEGIN
       FOR rec_rating IN cur_rating LOOP
           lv_totdays_num := rec_rating.returneddate -  
           rec_rating.checkoutdate;
       IF lv_totdays_num <= 10 THEN lv_rating_txt := 'DR';
       ELSIF lv_totdays_num <= 25 THEN lv_rating_txt := 'CR';
       ELSIF lv_totdays_num <= 35 THEN lv_rating_txt := 'BR';
       ELSE lv_rating_txt := 'A';
       END IF;
       INSERT INTO bookshelf_audit (title, publisher, categoryname,  
                                   new_rating, auditdate)
       VALUES      (rec_rating.title, rec_rating.publisher,   
                 rec_rating.categoryname, lv_rating_txt, sysdate)
       WHERE CURRENT OF cur_rating;
    END LOOP;
    COMMIT;
    END;
UPDATE或DELETE语句中的WHERE CURRENT OF子句说明应从表中获取的最新行应更新或删除:

UPDATE table_name
  SET set_clause
  WHERE CURRENT OF cursor_name;

但不适用于INSERT语句。 所以,移除电流额定值部分的电流,代码将运行。这就是将INSERT语句设置为:

INSERT INTO bookshelf_audit (title, publisher, categoryname,  
                                   new_rating, auditdate)
       VALUES      (rec_rating.title, rec_rating.publisher,   
                 rec_rating.categoryname, lv_rating_txt, sysdate);
UPDATE或DELETE语句中的WHERE CURRENT OF子句说明应从表中获取的最新行应更新或删除:

UPDATE table_name
  SET set_clause
  WHERE CURRENT OF cursor_name;

但不适用于INSERT语句。 所以,移除电流额定值部分的电流,代码将运行。这就是将INSERT语句设置为:

INSERT INTO bookshelf_audit (title, publisher, categoryname,  
                                   new_rating, auditdate)
       VALUES      (rec_rating.title, rec_rating.publisher,   
                 rec_rating.categoryname, lv_rating_txt, sysdate);
您需要从insert中删除where子句。。。价值观声明:

INSERT INTO bookshelf_audit
    (title, publisher, categoryname,  
     new_rating, auditdate)
VALUES
    (rec_rating.title, rec_rating.publisher,   
     rec_rating.categoryname, lv_rating_txt, sysdate)
WHERE CURRENT OF cur_rating;
应该是

INSERT INTO bookshelf_audit
    (title, publisher, categoryname,  
     new_rating, auditdate)
VALUES
    (rec_rating.title, rec_rating.publisher,   
     rec_rating.categoryname, lv_rating_txt, sysdate);
您需要从insert中删除where子句。。。价值观声明:

INSERT INTO bookshelf_audit
    (title, publisher, categoryname,  
     new_rating, auditdate)
VALUES
    (rec_rating.title, rec_rating.publisher,   
     rec_rating.categoryname, lv_rating_txt, sysdate)
WHERE CURRENT OF cur_rating;
应该是

INSERT INTO bookshelf_audit
    (title, publisher, categoryname,  
     new_rating, auditdate)
VALUES
    (rec_rating.title, rec_rating.publisher,   
     rec_rating.categoryname, lv_rating_txt, sysdate);

请粘贴整个错误消息:ORA-06550行号?柱INSERT子句中缺少分号请粘贴整个错误消息:ORA-06550行号?柱INSERT子句中缺少分号,非常好,谢谢@William Robertson!非常好用,谢谢@William Robertson!谢谢@Barbaros Ozhan!谢谢@Barbaros Ozhan!