2012-11-13 37 views
1

我有查询。我有1列user_auto234值。 我想找到哪个表正在使用此列和具体的值。PL/SQL帮助检查特定表中的特定值

我已经完成了多少个表正在使用此列。

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.想要关于此用户的所有详细信息?

+0

所以,你的意思是你有一个查询使用表中的列,而不是查看查询来确定它是哪个表,你想要搜索系统表中的列?精细。你有尝试过别的吗?你问题的最后部分非常复杂。 – GolezTrol

回答

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. 
+0

嗨Dazzal,谢谢你的答复..你可以给我发送PROCEDURE为此。 – Kaz

+0

sql服务器?您已将此问题标记为Oracle。我已经为你重制了它。 – DazzaL