Почему / копия не работает в модуле ILE

Итак, я немного запутался. Я создал простой модуль с одной процедурой. Это работает как очарование, когда прототип и структура данных включены внутри...

  ctl-opt option(*srcstmt:*nodebugio) nomain ;

     dcl-ds IIM ext end-ds;
     dcl-pr GetIIM LikeDS(IIM);
        *n char(35) options(*nopass) value ;
     end-pr ;


   dcl-proc GetIIM  export ;

     dcl-pi *n LikeDS(IIM);
        Item char(35) options(*nopass) value ;
     end-pi ;

     exec sql
       select * into :IIM
         from iim where iprod=:ITEM;

     return IIM   ;
   end-proc ;          

Но когда я использую / копировать, компилятор SQL не любит структуру данных и выдает ошибку...

Прототип

 /if defined(GetIIM)
   dcl-ds IIM ext end-ds;

   dcl-pr GetIIM LikeDS(IIM);
      *n char(35) options(*nopass) value ;
   end-pr ;

     /endif  

Процедура

 ctl-opt option(*srcstmt:*nodebugio) nomain ;
       /define GetIIM
       /copy JAGRACE/SANDBOX3,prototype
       /undefine GetIIM

     dcl-proc GetIIM  export ;

     dcl-pi *n LikeDS(IIM);
        Item char(35) options(*nopass) value ;
     end-pi ;

     exec sql
       select * into :IIM
         from iim where iprod=:ITEM;

     return IIM   ;
   end-proc ;

Процедура

Итак, что за глупость я сейчас делаю? Код ошибки: SQL 0312 Переменная IIM не определена или не используется.

Я думал, что /copy в основном поместит этот фрагмент кода в исходный код и скомпилирует. Я понимаю, что у прекомпилятора SQL есть проблема, но я потерян...

1 ответ

Решение

Взгляните на параметр параметров препроцессора RPG (RPGPPOPT) команды Создать объект RPG SQL ILE (CRTSQLRPGI).

Онлайн помощь...

Опции препроцессора RPG (RPGPPOPT)

Specifies if the ILE RPG compiler will be called to preprocess the  
source member before the SQL precompile is run.  Preprocessing the  
SQL source member will allow some compiler directives to be handled 
before the SQL precompile.  The preprocessed source will be placed  
in file QSQLPRE in QTEMP.  This source will be used for the SQL     
precompile.                                                        

*NONE                                                              
    The compiler is not called for preprocessing.                  

*LVL1                                                              
    The compiler is called for preprocessing to expand /COPY and   
    handle the conditional compilation directives except the       
    /INCLUDE directive.                                            

*LVL2                                                              
    The compiler will be called for preprocessing to expand /COPY  
    and /INCLUDE and handle the conditional compilation directives.

Убедитесь, что вы не используете *NONE.

Другие вопросы по тегам