首页 文章

PLS-00103:当期待下面的一个时遇到符号“FETCH”

提问于
浏览
0

创建了如下过程:

create or replace
  PROCEDURE TEST AS 
  BEGIN
  DECLARE
     c_service process_state.service%type;
     c_tr_source process_state.tr_source%type;

     CURSOR c_process_state is
        SELECT service, tr_source FROM process_state;

          OPEN c_process_state;
           LOOP
           FETCH c_process_state into c_service, c_tr_source;
             insert into process_state_archive values (c_service, c_tr_source);
             commit;
           EXIT WHEN c_process_state%notfound;
           END LOOP;   
     CLOSE c_process_state;
   END TEST;

编译后我遇到了一些错误:

错误(33,4):PLS-00103:遇到以下其中一项时遇到符号“FETCH”:常量异常表long double ref char time timestamp interval date

错误(44,4):PLS-00103:遇到以下其中一项时遇到符号“CLOSE”:end not pragma final instantiable volgorde覆盖静态成员构造函数映射

任何人都可以解释一下这个问题吗?我是初学者,学习SQL .

1 回答

  • 1

    1)你应该在BEGIN之前但不在之后声明游标,并且EXIST WHEN应该在FETCH之后立即声明

    create or replace
      PROCEDURE TEST AS 
    
         c_service process_state.service%type;
         c_tr_source process_state.tr_source%type;
    CURSOR c_process_state is
            SELECT service, tr_source FROM process_state;
      BEGIN
    
              OPEN c_process_state;
               LOOP
               FETCH c_process_state into c_service, c_tr_source;
               EXIT WHEN c_process_state%notfound;
                 insert into process_state_archive values (c_service, c_tr_source);
                 commit;
    
               END LOOP;   
         CLOSE c_process_state;
       END TEST;
    

    2)你的任务似乎可以在一个语句中解决,而不是用光标代码很多代码:

    INSERT INTO process_state_archive select service, tr_source FROM process_state;
    

相关问题