2014-01-13 3 views
0

Я использую следующий код:Вызов функции в цикле?

for x in c_body loop 

    ln_start := decrypt(card_no); --This calls to a function 
    utl_file.put_line(out_file_card, x.data_line); -- writes data to a file 
    end loop; 

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

select card_no_from_table 
into card_no 
from card_table; 

Это дает мне ошибку, что я пытаюсь вставить слишком много строк в переменную, которую я понимаю. Поэтому мой вопрос заключается в том, что я могу использовать функцию внутри цикла?

Я думал о наличии цикла в цикле, или я должен попытаться сделать курсор для этого? Причина, по которой у меня есть функция в цикле, потому что мне нужно использовать расшифровку для каждой карты, пока она записывается в файл.

Благодарим за помощь, это оценено!

+1

затем используйте курсор и петля в петлю ... –

+0

Я думаю, вы должны попробовать сделать все это внутри своей функции. Не пытайтесь вызвать функцию в цикле. Но если вы хотите сделать это так, используйте курсор. Это тоже будет эффективной памятью. – iBug

+0

Я попробую курсор в цикле, который предложил Рафаэль и вы (codeBug), я довольно долго сражался с этим. Сегодня я расскажу вам об этом, если бы у меня был успех. Спасибо за помощь. – XcisioN

ответ

0

Я думаю, было бы лучше, если бы вы использовали курсор для этого. Попробуйте это:

CURSOR csr isSELECT card_no_from_table FROM card_table; rec csr%rowtype; BEGIN OPEN csr; LOOP
FETCH csr INTO rec;
EXIT WHEN csr%NOTFOUND;
ln_start := decrypt(rec.card_no_from_table);
utl_file.put_line(out_file_card, x.data_line);
END LOOP;
CLOSE csr;
END;

+0

Это сработало для меня, спасибо так много для вашей помощи, а также предложения, сделанные другими членами. Это высоко ценится. – XcisioN

0

Ответ, который я принял сделал решить мою проблему, но это было довольно дорогое время мудрым На будущее я после того, что я сделал, и то, что работал для меня в этом отношении.

Cursor csr is 
Select name, 
     surname, 
     decrypt(card_no), -- call the decrypt function in the cursor select 
     to_char(sysdate,'DD/MM/YYYY') data_line 
From table, followed by where and joins. 

Тогда я просто выполнил функцию в цикле записи в файл с помощью этого цикла:

for writeBodyin csr 
loop 
    utl_file.put_line(out_file_card, writeBody.data_line); 
end loop; 

и это работает прекрасно.

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