oracle 根据值找字段

来源:互联网 发布:电子密码锁编程 编辑:程序博客网 时间:2024/06/05 19:30

在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;

 

 

原创粉丝点击