2016-03-17 2 views
1

В настоящее время я пытаюсь обновить SQR для проверки повторяющихся значений по столбцам внутри данной записи. Мы разрешаем вводить дубликаты в таблицу, но мы хотим, чтобы флаг ошибки проверялся, когда он прерывает следующую программу.Проверка дубликатов в SQR

ID - 1 Var1 - 3809 Var2 - 3809 
ID - 2 Var1 - NULL Var2 - NULL 
ID - 3 Var1 - 5204 Var2 - 3809 

В этом случае идентификатор 1 будет иметь флаг ошибки, а два других - нет. Я не могу просто проверять значения, поскольку мне нужно будет проверить 12 разных столбцов. Любая помощь приветствуется.

Спасибо! Dan

Я попробовал этот код, который компилируется, но не записывает дубликаты

begin-procedure check-duplicates 

create-array name=SchlDuplicates 
    size=15 
Field=Val:Char 

BEGIN-SQL 

SELECT 
MICA_SCH1_CEEBCD 
MICA_SCH2_CEEBCD 
MICA_SCH3_CEEBCD 
MICA_SCH4_CEEBCD 
MICA_COL1_CEEBCD 
MICA_COL2_CEEBCD 
MICA_COL3_CEEBCD 
MICA_TRSCH1_CEEBCD 
MICA_TRCOL1_CEEBCD 
MICA_TRCOL2_CEEBCD 
MICA_TRCOL3_CEEBCD 
MICA_TSSCH1_CEEBCD 
MICA_TSSCH2_CEEBCD 
MICA_TSSCH3_CEEBCD 


    put MICA_SCH1_CEEBCD into SchlDuplicates(1) Val 
    put MICA_SCH2_CEEBCD into SchlDuplicates(2) Val 
    put MICA_SCH3_CEEBCD into SchlDuplicates(3) Val 
    put MICA_SCH4_CEEBCD into SchlDuplicates(4) Val 
    put MICA_COL1_CEEBCD into SchlDuplicates(5) Val 
    put MICA_COL2_CEEBCD into SchlDuplicates(6) Val 
    put MICA_COL3_CEEBCD into SchlDuplicates(7) Val 
    put MICA_TRSCH1_CEEBCD into SchlDuplicates(8) Val 
    put MICA_TRCOL1_CEEBCD into SchlDuplicates(9) Val 
    put MICA_TRCOL2_CEEBCD into SchlDuplicates(10) Val 
    put MICA_TRCOL3_CEEBCD into SchlDuplicates(11) Val 
    put MICA_TSSCH1_CEEBCD into SchlDuplicates(12) Val 
    put MICA_TSSCH2_CEEBCD into SchlDuplicates(13) Val 
    put MICA_TSSCH3_CEEBCD into SchlDuplicates(14) Val 

    Let #I = 1 
    Let $DupFound = 'N' 
    While #I <= 13 and $DupFound = 'N' 
     Let #J = #I + 1 
     While #J <= 14 
      Get $Val1 from SchlDuplicates(#I) Val 
      Get $Val2 from SchlDuplicates(#J) Val 
      If $Val1 = $Val2 
    let $DupFound = 'Y' 
      do Insert-Error 
      End-If 

      add 1 to #J 
     End-While 

     Add 1 to #I 
    End-While 

FROM PS_MICA_STSCHL_STG 
WHERE MICA_COMMON_APP_ID = $Application_ID || $Val1 
END-SQL 

End-Procedure 

Begin-Procedure Insert-Error 

If $DupFound = 'Y' 
Let $Error_table = 'Duplicate Schools' 
End-If 

BEGIN-SQL 
     INSERT INTO PS_MICA_ERROR_LOG 
     VALUES($Application_ID, 
      $App_export_dt, 
      $Error_table, 
      '') 

END-SQL 

end-procedure 
+0

вы видели мой ответ? – cardmagik

+0

@cardmagik - Я попытался запустить код, который я обновил, как указано выше, на основе вашего примера. Он работает с «Успехом», но я не получаю дополнение к таблице журнала ошибок, как хотелось бы. Я должен также упомянуть, что мой разработчик находится за пределами страны, поэтому я определенно новичок, когда речь заходит о SQR. –

+0

DupFound сбрасывается после каждой записи - при проверке дублирования и записи ошибки вы находитесь за пределами данных - в основном, только проверка последней записи в наборе. То, что вы должны сделать, это вызвать процедуру. Я могу добавить код, если вам нравится ниже, но он должен быть через несколько часов – cardmagik

ответ

0

Вот исправленный код, который составляет:

begin-procedure check-duplicates 

create-array name=SchlDuplicates 
    size=15 
Field=Val:Char 

BEGIN-SELECT 
MICA_SCH1_CEEBCD    
MICA_SCH2_CEEBCD    
MICA_SCH3_CEEBCD    
MICA_SCH4_CEEBCD    
MICA_COL1_CEEBCD    
MICA_COL2_CEEBCD    
MICA_COL3_CEEBCD    
MICA_TRSCH1_CEEBCD    
MICA_TRCOL1_CEEBCD    
MICA_TRCOL2_CEEBCD    
MICA_TRCOL3_CEEBCD    
MICA_TSSCH1_CEEBCD    
MICA_TSSCH2_CEEBCD    
MICA_TSSCH3_CEEBCD    

FROM PS_MICA_STSCHL_STG 
WHERE MICA_COMMON_APP_ID = $Application_ID 
END-SELECT 

    put $MICA_SCH1_CEEBCD into SchlDuplicates(1) Val 
    put $MICA_SCH2_CEEBCD into SchlDuplicates(2) Val 
    put $MICA_SCH3_CEEBCD into SchlDuplicates(3) Val 
    put $MICA_SCH4_CEEBCD into SchlDuplicates(4) Val 
    put $MICA_COL1_CEEBCD into SchlDuplicates(5) Val 
    put $MICA_COL2_CEEBCD into SchlDuplicates(6) Val 
    put $MICA_COL3_CEEBCD into SchlDuplicates(7) Val 
    put $MICA_TRSCH1_CEEBCD into SchlDuplicates(8) Val 
    put $MICA_TRCOL1_CEEBCD into SchlDuplicates(9) Val 
    put $MICA_TRCOL2_CEEBCD into SchlDuplicates(10) Val 
    put $MICA_TRCOL3_CEEBCD into SchlDuplicates(11) Val 
    put $MICA_TSSCH1_CEEBCD into SchlDuplicates(12) Val 
    put $MICA_TSSCH2_CEEBCD into SchlDuplicates(13) Val 
    put $MICA_TSSCH3_CEEBCD into SchlDuplicates(14) Val 

!show 'MICA_SCH1_CEEBCD: ' $MICA_SCH1_CEEBCD ' MICA_SCH2_CEEBCD: '  $MICA_SCH2_CEEBCD 

    Let #I = 1 
    Let $DupFound = 'N' 
    While #I <= 13 and $DupFound = 'N' 
     Let #J = #I + 1 
     While #J <= 14 and $DupFound = 'N' 
      Get $Val1 from SchlDuplicates(#I) Val 
      Get $Val2 from SchlDuplicates(#J) Val 
      If $Val1 = $Val2 
      Show 'Found duplicates ' $Val1 ' ' $Val2 
      Let $DupFound = 'Y' 
      do Insert-Error 
      End-If 

      add 1 to #J 
     End-While 

     Add 1 to #I 
    End-While 



End-Procedure 

Begin-Procedure Insert-Error 

Let $Error_table = 'Duplicate Schools ' || $Val1 

BEGIN-SQL 
     INSERT INTO PS_MICA_ERROR_LOG 
     VALUES($Application_ID, 
      $App_export_dt, 
      $Error_table, 
      '') 

END-SQL 
End-procedure 
0

Это использует код и вызывает ошибки подпрограммы вставки для каждой записи с дубликатом. Это флаги КАЖДОЙ записи с обломоками (но только одна запись). Если вам нужна только одна ошибка для всех записей, сообщите мне.

begin-procedure check-duplicates 

create-array name=SchlDuplicates 
     size=15 
    Field=Val:Char 

BEGIN-SQL On-Error=give_warning 

SELECT 
School2_lookup_ceebcode 
School3_lookup_ceebcode 
School4_lookup_ceebcode 
College1_lookup_ceebcode 
College2_lookup_ceebcode 
College3_lookup_ceebcode 
TR_school_lookup_ceebcode 
TR_college1_lookup_ceebcode 
TR_college2_lookup_ceebcode 
TR_college3_lookup_ceebcode 
TR_2nd_school1_lookup_ceebcode 
TR_2nd_school2_lookup_ceebcode 
TR_2nd_school3_lookup_ceebcode 

    show 'School1_Lookup: ' &School1_Lookup_ceebcode ' School2_Lookup: ' &School2_Lookup_ceebcode 

     put &School1_lookup_ceebcode into SchlDuplicates(1) Val 
     put &School2_lookup_ceebcode into SchlDuplicates(2) Val 
     put &School3_lookup_ceebcode into SchlDuplicates(3) Val 
     put &School4_lookup_ceebcode into SchlDuplicates(4) Val 
     put &College1_lookup_ceebcode into SchlDuplicates(5) Val 
     put &College2_lookup_ceebcode into SchlDuplicates(6) Val 
     put &College3_lookup_ceebcode into SchlDuplicates(7) Val 
     put &TR_school_lookup_ceebcode into SchlDuplicates(8) Val 
     put &TR_college1_lookup_ceebcode into SchlDuplicates(9) Val 
     put &TR_college2_lookup_ceebcode into SchlDuplicates(10) Val 
     put &TR_college3_lookup_ceebcode into SchlDuplicates(11) Val 
     put &TR_2nd_school1_lookup_ceebcode into SchlDuplicates(12) Val 
     put &TR_2nd_school2_lookup_ceebcode into SchlDuplicates(13) Val 
     put &TR_2nd_school3_lookup_ceebcode into SchlDuplicates(14) Val 

     Let #I = 1 
     Let $DupFound = 'N' 
     While #I <= 13 and $DupFound = 'N' 
      Let #J = #I + 1 
      While #J <= 14 
       Get $Val1 from SchlDuplicates(#I) Val 
       Get $Val2 from SchlDuplicates(#J) Val 
       If $Val1 = $Val2 
       Show 'Found duplicates ' $Val1 ' ' $Val2 
       do Insert-Error 
       End-If 

       add 1 to #J 
      End-While 

      Add 1 to #I 
     End-While 

FROM PS_MICA_STSCHL_STG 
WHERE MICA_COMMON_APP_ID = $Application_ID 
END-SQL 

End-Procedure 

Begin-Procedure Insert-Error 

Let $Error_table = 'Duplicate Schools ' || $Val1 

BEGIN-SQL 
      INSERT INTO PS_MICA_ERROR_LOG 
      VALUES($Application_ID, 
       $App_export_dt, 
       $Error_table, 
       '') 

END-SQL 

end-procedure 
Смежные вопросы