Я полагаю, вы можете найти источник в all_triggers. К сожалению, данные находятся в переменной LONG (пример Oracle - делать как я говорю, а не как я). Таким образом, проще всего было бы создать таблицу для использования, заполнить ее данными, преобразованными в CLOB, а затем выполнить поиск:
CREATE TABLE tr (trigger_name VARCHAR2(32), trigger_body CLOB);
INSERT INTO tr
(SELECT trigger_name, TO_LOB(trigger_body)
FROM all_triggers
WHERE owner = 'xxx');
SELECT trigger_name
FROM tr
WHERE trigger_body LIKE '%something%';
Я не уверен, почему представление dba_source заполнено только для триггеров. Так же и в моей базе данных 10.2.0.4.
EDIT:
Вот короткий скрипт, который вы можете использовать для воссоздания всех ваших триггеров, и в этот момент все они должны быть в dba_source:
CREATE TABLE temp_sql (sql1 CLOB, sql2 CLOB);
INSERT INTO temp_sql (sql1, sql2) (
SELECT 'CREATE OR REPLACE TRIGGER '||
DESCRIPTION||' '||CASE WHEN when_clause IS NULL THEN NULL ELSE 'WHEN('||when_clause||')' END sql1,
to_lob(trigger_body) sql2
FROM all_triggers
WHERE table_owner = 'theowner');
DECLARE
v_sql VARCHAR2(32760);
BEGIN
FOR R IN (SELECT sql1||' '||sql2 S FROM temp_sql) LOOP
v_sql := R.s;
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/