【发布时间】:2014-12-17 21:07:37
【问题描述】:
我正在尝试通过运行时确定的 DBLink 运行一组查询(来自配置或其他输入)。我见过很多建议使用动态 SQL 和立即执行的例子。我想不惜一切代价避免这种情况,因为我的查询很长并且可能会更改,因此将它们放在字符串中会使维护变得更加困难。
我尝试让我的查询引用同义词,然后在执行查询之前更新同义词:
EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM my_tbl_s FOR my_tbl_t' || p_dblink_name;
SELECT * FROM my_tbl_s;
这可行,但是我想在包中使用它,所以当我执行创建同义词时,包无效。我还尝试将我的代码分成不同的包并在同义词更新后重新编译:
EXECUTE IMMEDIATE 'ALTER PACKAGE my_pck COMPILE';
但是,原来的调用包还是失效了。谁能想到不使用动态 SQL 来实现动态 DB Links 的方法?
【问题讨论】:
-
实际上,我认为同样的概念可以使用 VIEWS 而不是 SYNONYM。我不相信更新视图会使引用包无效。需要测试...
标签: oracle plsql oracle10g dblink