2014-01-13 80 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; 

,它奇妙的作品。