2009-10-15 15 views
0

주어진 :
오라클 10.2g는 데이터베이스입니다
나는 emp라는 테이블이 있습니다.
emp에는 SECRET이라는 VARCHAR2 열이 있습니다.
SECRET은 일반 텍스트 문자열을 포함하거나 암호화 된 문자열을 포함 할 수 있지만 다른 문자와 구별 할 수 있습니다.
DECRYPT라는 함수가 이미 존재하며 암호화 된 문자열이 있으면 암호화되지 않은 문자열이 반환됩니다.Oracle Ref 커서 수정

SECRET 열에 암호화되지 않은 문자열이 항상 포함되어있는 ref_cursor를 반환하는 함수를 작성하려면 어떻게해야합니까?

내가 의사에 찾고 있어요 것은 :

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

'SECRET' 열에 일반 텍스트 또는 암호화 된 데이터가 포함될 수있는 경우 DECRYPT 함수에 제공된 값이 암호화되지 않은 경우 암호 해독을 시도하지 않는 논리가 포함되어 있지 않은 이유는 무엇입니까? –

답변

2

문자열이 암호화되어 있으면 반환하는 is_encrypted 함수를 만든 다음 case 문을 사용하여 해독 된 값을 decrypt 함수를 통해 반환하거나 테이블에서 바로 반환합니다.

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

또는 의견 주석에 제안 된대로 암호 해독 기능을 변경하여 암호화되지 않은 문자열이 전달되면 전달 된 문자열 만 반환합니다.