通用Oracle查找验证功能

时间:2014-01-27 08:28:20

标签: oracle function plsql oracleforms

我有几个表只包含该特定模式中的id和description,我想知道是否可以编写一个通用函数,它将读取如下内容:

create or replace FUNCTION tab_lookup (key_field char,key_value char,from_table char,return_field char) RETURN char IS
a varchar2(1000);
BEGIN

select &return_field into a
from &from_table  
where &key_field=key_value;
return(a);
exception 
    when others
    then 
    return('*ERR*');
END;

我想在内部包应用程序中使用它,只有50个用户将使用它。

1 个答案:

答案 0 :(得分:0)

修改了您的版本,方法是使用Dynamic SQL进行更改,并将输入参数的数据类型更改为VARCHAR2

CREATE OR REPLACE FUNCTION tab_lookup (key_field VARCHAR2,
                                       key_value VARCHAR2,
                                       from_table VARCHAR2,
                                       return_field VARCHAR2,
                                       return_type VARCHAR2)
RETURN VARCHAR2 IS
result_a varchar2(1000);
query_string VARCHAR2(4000);
/*version 0.1*/
BEGIN

  query_string := 'SELECT '||return_field|| 
                  'FROM '||from_table||  
                  'WHERE '||key_field || ' = :key_value ';

  IF(return_type = 'SQL') THEN
     result_a := query_string;
  ELSE

       //this line will not work in forms 6i remove the using key_value word
       EXECUTE IMMEDIATE query_string USING key_value  into result_a;
  END IF;

  RETURN (result_a);
EXCEPTION 

 // add DBMS_ASSERT Exceptions
WHEN 
    NO_DATA_FOUND THEN 
       RETURN(NULL);
WHEN
    TOO_MANY_ROWS THEN 
       RETURN('**ERR_DUPLICATE**');
WHEN OTHERS
THEN 
        RETURN('*ERR_'||SQLERRM);
END;