2013-09-25 64 views

回答

0

在Oracle中,你無法找到其序列上表中使用,它不是在表關聯水平。爲此,您需要查找代碼,並搜索使用它的序列,可以在插入觸發器之前或在PL/SQL代碼中使用它。

觸發,你可以看到數據字典視圖

select table_name, 
     trigger_name as object_name, 
     'TRIGGER' object_type 
from ALL_TRIGGERS 

編輯 我找到一個序列的方式是

  1. 假設我想查一下「Seq_ID」是被使用。
  2. 從dba_source中選擇*,其中較低(文本)如'%seq_id.nextval%';
  3. 這會告訴我序列被引用的代碼,可能你可以在代碼中找到插入語句,從中你可以發現這個序列與哪個表關聯
  4. 或者它會給你觸發代碼,並從觸發器中可以找到引用哪個表。
+0

@guruv然後如何看哪個表與哪個序列相關聯? – user2801653

+0

@ user2801653:請查看編輯部分 –

0

您從依賴關係表中獲取此詳細信息。

select * from user_dependencies where (referenced_type like 'TRIGGER' OR 
referenced_type = 'SEQUENCE') and type = 'TABLE'; 
+0

你的表現,現在的行選擇 – user2801653

+0

有一個序列之間沒有關係Oracle中的一個表格,因此沒有列出'user_dependencies'的依賴關係。爲了獲得與表相關的觸發器,條件必須是'type ='TRIGGER'和referenced_type ='TABLE''的另一種方式。順便說一句:使用沒有通配符的'LIKE'沒有任何意義。 –

+0

是模式中的觸發器和表。如果不是,則使用模式過濾器的all_dependencies表。 –

1

在SQL Server中,你可以使用sys.triggers和SYS.TABLES一樣,

 select ta.name AS 'TableName', tg.name 'TriggerName' from sys.triggers tg 
    INNER JOIN sys.tables ta ON tg.parent_id = ta.object_id 
+1

這個問題顯然是關於Oracle的。 –

+0

我認爲,解決方案在sql server中是否是oracle問題。請投票鼓勵我成爲新來的人...... –

+0

Sory,但爲什麼我應該提出一個對提問者不起作用的答案? –

0

你可以找到觸發和序列具有以下statment

select 
     table_name, trigger_name, referenced_name as sequence_name 
    from 
     all_triggers 
    join all_dependencies 
    on name = trigger_name and referenced_type = 'SEQUENCE' 
    ; 
+0

gud,但顯示列的結尾腳本結果中當前僅支持5,000行 – user2801653