如题,我知道某个列值,可是不知道在哪个表中,对应哪个列?当然,它也可能对应数据库中的N个表中的列,有没有办法把这些表和列都查出来?

解决方案 »

  1.   

    借助工具(如PowerDesigner)将数据库的建表sql都生成到同一个文本,用查找查吧
      

  2.   

    爱莫能助 
    估计会用到USER_TAB_COLUMNS;
      

  3.   

    select * from user_tab_cols t where t.column_name=upper('字段名');
    select * from user_tab_columns t where t.column_name=upper('字段名');
      

  4.   

    select table_name,column_name from user_tab_cols where column_name=upper('列名')
      

  5.   

    好像理解错了吧,楼主是知道某列的内容=‘123’,但不知道这个内容对应哪张表哪个列,想把有这个内容的表名、列名找出来。
    这种事,哪是一个SQL能搞定的。
      

  6.   

    做完了。这个只有你要查询的值是VARCHAR2
    类型的时候才可以。其他类型,你自己稍微改一下就可以了。DECLARE
      CURSOR C_TABLE_LIST
      IS
        SELECT A.table_name FROM user_tables A;
      v_table_list C_TABLE_LIST%ROWTYPE;
      CURSOR C_COL_LIST (p_table_nm user_tab_columns.table_name%type := 'CURSOR param')
        IS 
        SELECT A.column_name FROM user_tab_columns A WHERE DATA_TYPE='VARCHAR2' AND A.table_name=p_table_nm;
      v_col_list C_COL_LIST%ROWTYPE;
      TYPE my_cursor IS REF CURSOR;
      the_cursor my_cursor;
      v_into_value PLS_INTEGER:=0;
      v_result_value VARCHAR2(50):='CSDN';
    BEGIN
      OPEN C_TABLE_LIST;
      <<TABLE_LOOP>>
      LOOP
        FETCH C_TABLE_LIST INTO v_table_list;
        EXIT TABLE_LOOP WHEN C_TABLE_LIST%NOTFOUND;
          OPEN C_COL_LIST(v_table_list.table_name);
            <<COL_LOOP>>
             LOOP
              FETCH C_COL_LIST INTO v_col_list;
              EXIT COL_LOOP WHEN C_COL_LIST%NOTFOUND;
               DBMS_OUTPUT.PUT_LINE('TBALE_NAME:'|| v_table_list.table_name);
               DBMS_OUTPUT.PUT_LINE('COL_NAME:'|| v_col_list.column_name);
               DBMS_OUTPUT.PUT_LINE('v_result_value:'|| v_result_value);
                OPEN the_cursor FOR 'SELECT COUNT(1) as val FROM ' 
                              || v_table_list.table_name 
                              || ' WHERE ' || v_col_list.column_name 
                              || '=''' || v_result_value || '''';
                      <<VAL_LOOP>>
                      LOOP
                        FETCH the_cursor INTO v_into_value;
                        EXIT VAL_LOOP WHEN the_cursor%NOTFOUND;
                          IF v_into_value > 0 THEN
                            DBMS_OUTPUT.PUT_LINE('TBALE_NAME:'|| v_table_list.table_name);
                            DBMS_OUTPUT.PUT_LINE('COL_NAME:'|| v_col_list.column_name);
                          END IF;
                      END LOOP;
                CLOSE the_cursor;
            END LOOP;
            CLOSE C_COL_LIST;
      END LOOP;
      CLOSE C_TABLE_LIST;
    END;
    /
      

  7.   

    谢谢各位的回答,看来这个问题还比较复杂.6楼的回答很详细,肯定是经过一番思考,先谢了,我只会一点简单的SQL语句,看不懂(见笑了),我平时都是用sql navigator(在客户端)查询一些数据,请问你这段代码如何运行?如果一两天内没有更简单的方法,我会结贴给你,再次谢谢!