在oracle

时间:2016-04-21 09:21:41

标签: oracle function dynamic plsql password-encryption

我有很多具有相同结构的表。其中一个结构如下:表名为TRACK_CONNECTION

现在我想创建动态函数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 function中使用decrypt_password_global function来解密表中的值。

1 个答案:

答案 0 :(得分: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;