在循环中调用函数?

时间:2014-01-13 06:53:43

标签: sql oracle

我正在使用以下代码:

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;

它给了我错误,我试图在变量中插入太多行,我理解。因此,我有一种方法可以在循环中使用该函数吗?

我想过在循环中有一个循环,或者我应该尝试为此制作游标? 我在循环中使用该函数的原因是,因为我需要在写入文件时对每张卡使用解密。

感谢您的帮助,非常感谢!

2 个答案:

答案 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;

并且效果非常好。