2016-08-03 3 views
0

. Следующая функция содержится в пакете PLSQL, который вызывается из сценария оболочки. Он не работает, потому что JIT_TIME не найден. Мне трудно найти, откуда эта ценность. Он явно не передается в качестве аргумента, не сохраняется в любой таблице базы данных, а не извлекается из любого другого объекта базы данных.Код не работает, потому что значение JIT_TIME не найдено

Function ADD_START_DATE(p_process_type char, p_profet_cntl_no char, p_error_file UTL_FILE.FILE_TYPE) return boolean is                     
     v_profet_control_no  char(10);                                           
     v_jit_time    date;                                             
    BEGIN                                                 
     BEGIN                                                 
      SELECT  contr_numb                                             
      INTO  v_profet_control_no                                            
      FROM  prd_contr                                              
      WHERE  end_date_time is null                                           
      AND   start_date_time is not null                                          
      AND   rownum=1;                                              
      PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01601','ProFET Control No.='||v_profet_control_no);                         
      return false;                                               
     EXCEPTION                                                
      when NO_DATA_FOUND then                                            
       null;                                                
     END;                                                 
     lock table prd_contr in exclusive mode nowait;                                       
     BEGIN                                                 
--                                                  
-- A new Begin-End block has been added for jit_time function. If the value                                
-- of jit_time is not found, in case of complete refresh, an error is logged                                
-- and the process exits. In case of routine, jit_time error is ignored.                                 
--                                                  
      BEGIN                                                 
       v_jit_time:=jit_time;                                            
      EXCEPTION                                                
       when OTHERS then                                              
        IF p_process_type = 'C' then                                          
         PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01604', '');                                  
         return false;                                              
        END IF;                                                
      END;                                                 
      INSERT into prd_contr(start_date_time, end_date_time, idp1_xfer,                                  
        proc_type, contr_numb, idp1_time)                                         
      VALUES(SYSDATE, '','', p_process_type, p_profet_cntl_no,v_jit_time);                                 
     EXCEPTION                                                
      when OTHERS then                                              
       return false;                                              
     END;                                                 
     commit;                                                
     return true;                                               
    EXCEPTION                                                
     when TIMEOUT_ON_RESOURCE then                                           
      PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01602', '');                                   
      return false;                                               
     when OTHERS then                                              
      PKG_WRITE_ERROR.writeError(p_error_File, 'PRD-01699',substr(SQLERRM,1,100));                               
      return false;                                               
    END ADD_START_DATE; 
+0

Update: - JIT_TIME это ссылка базы данных с вышестоящим – user2295715

+0

JIT_TIME подключается к потоку системы, которая принимает транспортное средство заказы. – user2295715

ответ

0

Я заметил, что переменная дата определена с типом v_jit_time, но никогда не used.In с другой стороны, есть переменная, jit_time, что никогда не определяется. я, что они могли бы стать один:

Function ADD_START_DATE(p_process_type char, p_profet_cntl_no char, p_error_file UTL_FILE.FILE_TYPE) return boolean is                     
     v_profet_control_no  char(10);                                           
     v_jit_time    jit_time;                                             
    BEGIN                                                 
     BEGIN                                                 
      SELECT  contr_numb                                             
      INTO  v_profet_control_no                                            
      FROM  prd_contr                                              
      WHERE  end_date_time is null                                           
      AND   start_date_time is not null                                          
      AND   rownum=1;                                              
      PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01601','ProFET Control No.='||v_profet_control_no);                         
      return false;                                               
     EXCEPTION                                                
      when NO_DATA_FOUND then                                            
       null;                                                
     END;                                                 
     lock table prd_contr in exclusive mode nowait;                                       
     BEGIN                                                 
--                                                  
-- A new Begin-End block has been added for jit_time function. If the value                                
-- of jit_time is not found, in case of complete refresh, an error is logged                                
-- and the process exits. In case of routine, jit_time error is ignored.                                 
--                                                  
      BEGIN                                                 
       v_jit_time:=jit_time;                                            
      EXCEPTION                                                
       when OTHERS then                                              
        IF p_process_type = 'C' then                                          
         PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01604', '');                                  
         return false;                                              
        END IF;                                                
      END;                                                 
      INSERT into prd_contr(start_date_time, end_date_time, idp1_xfer,                                  
        proc_type, contr_numb, idp1_time)                                         
      VALUES(SYSDATE, '','', p_process_type, p_profet_cntl_no,v_jit_time);                                 
     EXCEPTION                                                
      when OTHERS then                                              
       return false;                                              
     END;                                                 
     commit;                                                
     return true;                                               
    EXCEPTION                                                
     when TIMEOUT_ON_RESOURCE then                                           
      PKG_WRITE_ERROR.writeError(p_error_File , 'PRD-01602', '');                                   
      return false;                                               
     when OTHERS then                                              
      PKG_WRITE_ERROR.writeError(p_error_File, 'PRD-01699',substr(SQLERRM,1,100));                               
      return false;                                               
    END ADD_START_DATE; 
0

Насколько я могу понять JIT_TIME является функция. Итак, вы должны искать в определениях функций, а не в аргументах, переменных или таблицах.

Кроме того, программист явно предвосхищает в некоторых случаях эта функция не будет найден, как видно в комментариях

-- If the value                                
-- of jit_time is not found, in case of complete refresh, an error is logged                                
-- and the process exits. In case of routine, jit_time error is ignored. 
+0

Привет, только что работал с командой DBA и узнал, что это ссылка на базу данных. – user2295715

+1

Звучит не так. JIT_TIME имеет дату типа, потому что v_jit_time - дата ... поэтому он может использовать ссылку db ... но я не думаю, что это сама связь с db. – Plirkee

Смежные вопросы