Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 修改Oracle引用游标_Sql_Oracle_Stored Procedures_Plsql_Oracle10g - Fatal编程技术网

Sql 修改Oracle引用游标

Sql 修改Oracle引用游标,sql,oracle,stored-procedures,plsql,oracle10g,Sql,Oracle,Stored Procedures,Plsql,Oracle10g,给定: Oracle 10.2g是数据库 我有一张叫emp的桌子。 emp有一个名为SECRET的VARCHAR2列。 SECRET可能包含纯文本字符串,也可能包含加密字符串,但我可以区分其中一个 已经存在一个名为DECRYPT的函数,给定加密字符串,该函数将返回一个未加密字符串 如何编写一个函数来返回一个ref_游标,该游标在SECRET列中始终包含一个未加密的字符串 我在伪代码中寻找的是: use a cursor to get all the rows of emp for e

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

如何编写一个函数来返回一个ref_游标,该游标在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返回的方法

对策略有什么想法吗?

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

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

或者,正如问题注释中所建议的,只需更改解密函数,这样,如果它传递了一个非加密字符串,它只返回它传递的字符串。

如果
SECRET
列可能包含明文或加密数据,如果提供的值未加密,为什么解密函数不包含不尝试解密的逻辑?