2016-04-21 90 views
0

我有许多具有相同结构的表。其中一种结构如下:表名是TRACK_CONNECTION在oracle中创建动态函数

现在我想创建动态函数decrypt_password_global,这样它就可以获取动态输入值并从表中解密密码并返回值。我想在函数中传递table_name,column_name,table_id,table_id_value作为输入参数,例如在执行函数decrypt_password_global时,例如对于TRACK_CONNECTION表,我将通过(TRACK_CONNECTION,PASS,ID,11)。通过这种方式,我也可以为其他表使用decrypt_password_global函数。我已经为密码的decrpytion创建了decrypt_password函数,并且它工作正常。我只想在decrypt_password_global function中使用decrypt_password function来解密表中的值。

回答

1

建立一个SELECT-String,并使用EXECUTE IMMEDIATE/INTO:

CREATE OR REPLACE FUNCTION decrypt_password(table_name IN varchar2,column_name IN varchar2,table_id varchar2,table_id_val varchar2) RETURN VARCHAR2 
    IS 
    encrypted_pas varchar2(100); 
    decrypted_pas varchar2(100); 

    BEGIN 
     EXECUTE IMMEDIATE 'select ' || column_name || ' from ' || table_name || ' where ' || table_id || ' = ' || table_id_val 
     INTO encrypted_pas; 
     Select decrypt_password(encrypted_pas) into decrypted_pas from dual; 


    END decrypt_password;