:
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返回的方法。
对战略的任何想法?
答案 0 :(得分:2)
创建一个“is_encrypted”函数,该函数返回字符串是否已加密,然后使用case语句通过decrypt函数或直接从表中返回解密值。
select case
when is_encrypted(secret) = 'Y' then decrypt(secret)
else secret end as ecrypted_secret
from emp
或者如问题评论中所建议的那样,只需更改解密函数即可,如果它传递了非加密字符串,则只返回传递的字符串。