您的位置:首页 > 数据库 > Oracle

oracle 根据值找字段

2011-12-01 15:36 253 查看
在sql中我们经常 用  where field='XXXX'  来判断获取特定数据。

在一次项目中遇到了个比较奇怪的问题,需要根据值来反向检索字段,即是否有字段存在特定的值。想来想去好像没办法用一个sql实现于是写了个存储过程简单实现。

其实可以写得很强大,但就是懒---能实现功能就好。代码如下。

 

-- 反向判断:判断指定表是否有存在 特定值的字段(该表主键写死掉punid,哈哈业务是这样有需要可以改成动态的)

CREATE OR REPLACE PROCEDURE "P_FINDCOLUMNSBYVALUE"

(

  retVal out integer,  --返回是否存在 1存在,0不存在

  unid in varchar2,  --主键

  inTableName in varchar2,  --表名

  inValue in varchar2  --值

)

 as

  tmp_columns varchar2(100); --表的字段名

 IS_EXIST NUMBER;  --数据是否存在

  tmp_sql   char(150);

begin

  retVal := 0;

  declare cursor c_tmp is  SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME= inTableName and t.DATA_TYPE='VARCHAR2';

  begin

    open c_tmp;

      loop

        fetch c_tmp into tmp_columns;

          tmp_sql := 'select count(*)  from '||inTableName||' where '||tmp_columns||' = '''||inValue||''' and punid = '''||unid||'''';

          DBMS_OUTPUT.PUT_LINE(tmp_sql); 

          execute immediate tmp_sql into IS_EXIST;

          DBMS_OUTPUT.PUT_LINE(IS_EXIST); 

          IF (IS_EXIST != 0) THEN

            retVal := 1;

            exit;

          end if;

          exit when c_tmp%NOTFOUND;

        end loop;

      close c_tmp;   --关闭游标

   end;

end;

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle sql integer c 存储 user