2014-01-13 127 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語句像這樣的:

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; 

,它奇妙的作品。