写一个存储过程,然后由pb调用即可。
例:
CREATE OR REPLACE PROCEDURE compile_invalid_trigger
AS
CURSOR c1
IS SELECT * FROM user_objects WHERE object_type='TRIGGER' AND status='INVALID';
l_c1 c1%ROWTYPE;
sql_str VARCHAR2(200);
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO l_c1;
EXIT WHEN c1%NOTFOUND;
sql_str:='alter trigger '||l_c1.object_name||' compile';
-- dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE c1;
END;
例:
CREATE OR REPLACE PROCEDURE compile_invalid_trigger
AS
CURSOR c1
IS SELECT * FROM user_objects WHERE object_type='TRIGGER' AND status='INVALID';
l_c1 c1%ROWTYPE;
sql_str VARCHAR2(200);
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO l_c1;
EXIT WHEN c1%NOTFOUND;
sql_str:='alter trigger '||l_c1.object_name||' compile';
-- dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE c1;
END;
至于业务上的就让用户去检测。
我做后台维护的就显得不那么被动了。我觉得那个方法可行,不过好像有些trigger不合理的时候
那个字段并不是invalid的。。