Реализация логического цикла for в SQL SERVER - PullRequest
0 голосов
/ 28 февраля 2019
FOR deposit_indx IN 1..deposit_table_obj.COUNT
    LOOP     
      FOR i IN 1..category_table_obj.COUNT LOOP
        IF(deposit_table_obj(deposit_indx).borrower_category_code IS NULL
          OR deposit_table_obj(deposit_indx).sector_code IS NULL
          OR deposit_table_obj(deposit_indx).sub_sector_code IS NULL) 
        THEN
          excludeAcct := 1;                                
          EXIT;
        ELSIF(INSTR(category_table_obj(i).borrowercat_code, deposit_table_obj(deposit_indx).borrower_category_code) > 0
          AND INSTR(category_table_obj(i).sector_code, deposit_table_obj(deposit_indx).sector_code) > 0
          AND INSTR(category_table_obj(i).sub_sector_code, deposit_table_obj(deposit_indx).sub_sector_code) > 0) 
        THEN
          excludeAcct := 0;
          EXIT;        
        ELSE
          excludeAcct := 1;                                
        END IF;
      END LOOP;

      IF(excludeAcct = 1) THEN
        exclusion_table_obj.EXTEND;
        exclusion_table_obj(ex_indx).acid        :=  deposit_table_obj(deposit_indx).acid;
        exclusion_table_obj(ex_indx).balance     :=  deposit_table_obj(deposit_indx).balance;
        exclusion_table_obj(ex_indx).rep_date    :=  deposit_table_obj(deposit_indx).rep_date;
        ex_indx := ex_indx + 1;     
        excludeAcct := 0;                                                  
      END IF;

    END LOOP;

Я пытаюсь реализовать этот раздел запроса в SQL SERVER.Я планирую сделать счетчик выбора () из deposite_table и выбрать счетчик () из category_table для использования в условии цикла while, или я должен использовать курсор?Кроме того, таблицы будут временными таблицами deposit_table и category_table и будут вызываться из хранимой процедуры.

1 Ответ

0 голосов
/ 28 февраля 2019

Как уже говорили другие, я не думаю, что вам нужен курсор или циклы.SQL просто делает такие вещи для вас, если вы знаете, как это задать.

Насколько я могу судить, ваш код вставляет строки в exclusion_table_obj при определенных условиях, поэтому я думаю, что он станет оператором INSERT примерно так:

INSERT INTO exclusion_table_obj(acid, balance, rep_date)
SELECT d.acid, d.balance, d.rep_date
FROM deposit_table_obj d
WHERE d.borrower_category_code IS NULL OR d.sector_code IS NULL OR d.sub_sector_code IS NULL
OR NOT EXISTS (SELECT *
               FROM category_table_obj c
               WHERE c.borrowercat_code = d.borrower_category_code
               AND c.sector_code = d.sector_code
               AND c.sub_sector_code = d.sub_sector_code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...