例如,只知道内容,不知道内容所在的字段,表。如何查询?
比如,内容:"北京",所在字段为:AREANAME,表名:tmp_homeareacode.
有没有SQL可以根据内容,把字段名和表名查出?

解决方案 »

  1.   

    写个过程吧,没办法直接查出来的
    select table_name,column_name from user_tab_columns
    用上面语句查询出当前用户下所有表的字段,
    遍历各表的字段,找到符合条件的
      

  2.   

    你是不是想弄清楚别人做的项目 而又没有相关文档若是这样可以跟踪sql试试
      

  3.   


    DECLARE 
      CURSOR cur_query IS
      select table_name,column_name from user_tab_columns ;
      strsql VARCHAR2(5000);
      v_number NUMBER;
    BEGIN
      FOR rec_query IN cur_query LOOP
        strsql := 'SELECT count(*) FROM '|| rec_query.table_name ||' WHERE '|| rec_query.column_name ||' LIKE ''%北京%''' ;
        execute immediate strsql INTO v_number; 
        IF v_number > 0 THEN
          dbms_output.put_line(rec_query.table_name||'--'||rec_query.column_name);  
        END IF;
     
      END LOOP;  
    END;
      

  4.   

    declare
      a    number;
      sql_hard varchar2(2000);
      vl       varchar2(20) := 's';   ---内容
      vv       number;
    begin
      for rec1 in (select table_name, column_name, data_type
                     from user_tab_columns) loop
        if rec1.data_type = 'VARCHAR2' OR rec1.data_type = 'CHAR' THEN
          a        := 0;
          sql_hard := 'select  instr (''' || vl || ''',' || rec1.column_name ||') as vv from  ' || rec1.table_name;
          IF A>0 THEN
                   DBMS_OUTPUT.put_line('TABLE NAME----'||REC1.TABLE_NAME);
                   DBMS_OUTPUT.put_line('COLUMN NAME----'||REC1.COLUMN_NAME);
          END IF ;
          EXECUTE IMMEDIATE sql_hard;
          sql_hard := '';
        END IF;
      end loop;
    end;
      

  5.   

    没有办法 。数据库原理是 先有表 ,在有字段 ,在有数据 。你想倒着知道不可能。 如果研究别人的程序。可以跟踪, sql数据库 有是事件探查器 。
      

  6.   

    恩,对。研究别人的程序,没有文档。是反编译CLASS文件的。而且他的程序是在UNIX下的,烦啊,只能自己一点一点摸索。谢谢各位大虾!