我正在尝试创建或替换在向远程表插入更新后执行的触发器。我知道你不能通过数据库链接做DDl,但我想知道是否有任何解决方法。也许动态sql使DDL被解释为一个字符串?或者使用DBlink创建同义词并调用同义词而不是表名。
任何帮助都将不胜感激。
Create or replace TRIGGER_NAME
after update or insert on REMOTE_TABLE@DB_link
for each row...
答案 0 :(得分:4)
如果要在更新远程表时触发触发器,则需要在远程数据库上创建该触发器。如果您实际上有权在远程数据库上创建触发器,我不确定为什么您不会只登录到远程服务器并执行DDL。您可以使用DBMS_UTILITY.EXEC_DDL_STATEMENT过程在远程服务器上运行DDL(假设您具有权限)
DBMS_UTILITY.EXEC_DDL_STATEMENT@remote_server(
'create or replace trigger trigger_name ' ||
' after update or insert on table_name ' ||
' for each row ' ||
...
);
我很难想象你为什么要这样做,而不是直接连接到远程服务器......