1

質問があります。user_auto値のある列が1 つあり234ます。この列を特定の値で使用しているテーブルを見つけたい。

この列を使用しているテーブルの数を確認しました。

SELECT t.name AS table_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%user_auto%'
ORDER BY  table_name;

user_auto = 234ここで、値を変更してこのテーブルが必要です。User_auto 値が 234 であることを意味します。このユーザーに関するすべての詳細が必要ですか?

4

1 に答える 1

0

このようなものが欲しいですか?

SQL> desc foo1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USER_AUTO                                          NUMBER

SQL> desc foo2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USER_AUTO                                          NUMBER

SQL> select * From foo1;

 USER_AUTO
----------
       123
      1234

SQL> select * From foo2;

 USER_AUTO
----------
       234

SQL> set serverout on
SQL> declare
  2    v_val varchar2(3) := '234';
  3    v_cnt pls_integer;
  4  begin
  5    for r_tab in (select table_name, column_name
  6                    from all_tab_columns
  7                   where column_name = 'USER_AUTO'
  8                   order by 1)
  9    loop
 10      dbms_output.put_line('Found table ' || r_tab.table_name || ' with column '||r_tab.column_name);
 11      execute immediate 'begin select count(*) into :b0 from '
 12                        || r_tab.table_name
 13                        || ' where rownum = 1 and ' || r_tab.column_name || ' = :b1;'
 14                        || 'end;' using out v_cnt, v_val;
 15      if (v_cnt = 1)
 16      then
 17        dbms_output.put_line(chr(9)||'row found for ' || v_val);
 18      else
 19        dbms_output.put_line(chr(9)||'no row found for ' || v_val);
 20      end if;
 21    end loop;
 22  end;
 23  /
Found table FOO1 with column USER_AUTO
        no row found for 234
Found table FOO2 with column USER_AUTO
        row found for 234

PL/SQL procedure successfully completed.
于 2012-11-14T00:03:02.283 に答える