2014-10-03 4 views
-1

я написал следующий фрагмент кода:значения курсора не доступны

PROCEDURE main(errbuf    OUT VARCHAR2, 
      retcode    OUT VARCHAR2, 
      p_parent_request_id in NUMBER) IS 


CURSOR cur_supplier_num IS 
    SELECT stg.rowid, stg.LEGACY_VENDOR_NUMBER, stg.SITE_IDENTIFIER 
    FROM XXCONV.GEAS_PA_COSTING_STG STG 
    WHERE RECORD_PROCESSING_STATUS IN (1, 2, 5) 
    AND STG.LEGACY_VENDOR_NUMBER IS NOT NULL; 

TYPE update_line IS TABLE OF cur_supplier_num%ROWTYPE; 
g_supplier_update update_line := update_line(); 

/* End of addtion 3-Oct-14*/ 

v_internal_request_id NUMBER; 
v_org_id    NUMBER; 
v_vendor_id    NUMBER; 
v_parent_request_id  NUMBER; 
v_return    NUMBER; 
v_record_process_status NUMBER; 
v_project_id   NUMBER; 
v_task_id    NUMBER; 
v_validation_var  VARCHAR2(20); 
v_val_user_var   VARCHAR2(20); 
v_val_emp_var   VARCHAR2(20); 
v_val_exp_type_var  VARCHAR2(20); 
v_val_exp_type_link_var VARCHAR2(20); 
v_val_proj_name_var  VARCHAR2(20); 
v_val_gl_date_var  VARCHAR2(20); 
v_val_exp_end_var  VARCHAR2(20); 
v_val_exp_item_var  VARCHAR2(20); 
v_val_cr_code_var  VARCHAR2(20); 
v_val_dr_code_var  VARCHAR2(20); 
v_val_curr_var   VARCHAR2(20); 
v_r12_project_number VARCHAR2(240); 

BEGIN 



dynamic_log('Validation Program Start '); 





BEGIN 



    OPEN cur_supplier_num; 
    LOOP 
     FETCH cur_supplier_num BULK COLLECT 
     INTO g_supplier_update LIMIT 2000; 

    CLOSE cur_supplier_num; 

    IF g_supplier_update.COUNT > 0 
    THEN 

     FORALL i IN 1..g_supplier_update.COUNT 
      UPDATE XXCONV.GEAS_PA_COSTING_STG stg 
      set R12_VENDOR_NUMBER = (
          select r12_supplier_code 
          FROM xxconv.supplier_legacy_r12_xref xref 
          WHERE xref.legacy_supplier_code =                                g_supplier_update.Legacy_VENDOR_NUMBER 
          AND xref.site_identifier = g_supplier_update.site_identifier) 
      WHERE stg.Legacy_VENDOR_NUMBER = g_supplier_update.LEGACY_VENDOR_NUMBER; 
    END IF; 
END LOOP; 
END; 

Когда я компиляции кода, я получаю сообщение об ошибке:

Error(285,46): PL/SQL: ORA-00904: "G_SUPPLIER_UPDATE"."LEGACY_VENDOR_NUMBER": invalid identifier 
Error(285,64): PLS-00302: component 'LEGACY_VENDOR_NUMBER' must be declared 

Я не могу понять, почему LEGACY_VENDOR_NUMBER не может быть распознан. Любая помощь по этому вопросу будет приветствовать

Вивек

+0

пожалуйста, выделите строку 285 .. . – AndreDuarte

+0

Пожалуйста, не используйте тег 'SQL' для вопросов' PL/SQL'. –

+0

Возвращаясь к вашему вопросу, вы можете дать псевдоним столбцам в объявлении курсора и попробовать перекомпилировать код. –

ответ

2

Вы должны использовать его как g_supplier_update(I).XXXXXX доступ к коллекции, I здесь индекс генерируется FOR LOOP

FORALL i IN 1..g_supplier_update.COUNT 
      UPDATE XXCONV.GEAS_PA_COSTING_STG stg 
      set R12_VENDOR_NUMBER = (
          select r12_supplier_code 
          FROM xxconv.supplier_legacy_r12_xref xref 
          WHERE xref.legacy_supplier_code = g_supplier_update(I).Legacy_VENDOR_NUMBER 
          AND xref.site_identifier = g_supplier_update(I).site_identifier) 
      WHERE stg.Legacy_VENDOR_NUMBER = g_supplier_update(I).LEGACY_VENDOR_NUMBER; 
+0

+1 Maheswaran. Я этого не видел ;-) Надеюсь, что OP будет 11 г или выше. Кстати, ваше имя слишком длинное, я могу назвать вас Mahesh или любое короткое имя, которое вы предпочитаете? :-) –

+0

:) Mahesh - мое домашнее животное и прозвище –

+0

Ну, я был близок к своей догадки :-) Happy Dussera, наслаждайтесь и продолжайте участвовать в сообществе Oracle. –

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