我正在使用以下代码:
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;
它给了我错误,我试图在变量中插入太多行,我理解。因此,我有一种方法可以在循环中使用该函数吗?
我想过在循环中有一个循环,或者我应该尝试为此制作游标? 我在循环中使用该函数的原因是,因为我需要在写入文件时对每张卡使用解密。
感谢您的帮助,非常感谢!
答案 0 :(得分:0)
我认为如果你使用游标会更好。 试试这个:
CURSOR csr is
SELECT 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;
答案 1 :(得分: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;
并且效果非常好。