修改Oracle Ref游标

时间:2009-10-15 05:16:41

标签: sql oracle stored-procedures plsql oracle10g

鉴于


Oracle 10.2g是数据库
我有一张叫做emp的桌子 emp有一个名为SECRET的VARCHAR2列 SECRET可能包含一个明文字符串,或者它可能包含一个加密的字符串,但我可以区分其中一个 已经存在一个名为DECRYPT的函数,在给定加密字符串的情况下,它将返回未加密的字符串。

如何编写一个返回ref_cursor的函数,该函数在SECRET列中始终包含未加密的字符串?

我在伪代码中寻找的是:

   use a cursor to get all the rows of emp
   for each row in emp
   see if SECRET is encrypted
   if yes, decrypt and store the unencrypted value back into SECRET
   if no, leave the row untouched
   return the cursor as a ref_cursor

基本上我想做的是在返回之前修改refcursor。但是,我不认为这是可能的。

我的第一个想法是建立一个游标%ROWTYPE的关联数组。没关系。我能做到。但是,我找不到将关联数组作为refcursor返回的方法。

对战略的任何想法?

1 个答案:

答案 0 :(得分:2)

创建一个“is_encrypted”函数,该函数返回字符串是否已加密,然后使用case语句通过decrypt函数或直接从表中返回解密值。

select case
       when is_encrypted(secret) = 'Y' then decrypt(secret)
       else secret end as ecrypted_secret
from emp

或者如问题评论中所建议的那样,只需更改解密函数即可,如果它传递了非加密字符串,则只返回传递的字符串。