如何编写可以针对给定数据库链接执行的整洁的PL / sql存储过程?
它变得非常混乱,写这样的东西:
PROCEDURE my_proc(aDbLink IN VARCHAR2) IS BEGIN EXECUTE IMMEDIATE ' SELECT mycolumn,anothercolumn FROM MYTABLE@' || aDbLink || ' WHERE such-and-such...' END
随着查询变大.
解决方法
避免使用动态sql的最简单方法是创建同义词.
CREATE OR REPLACE SYNONYM MyTableRemote FOR MyTable@database_link
然后,您的存储过程将简单地引用同义词MyTableRemote.然后,您可以使用单独的方法将数据库链接名称作为参数,并将所有同义词更改为指向数据库链接.
PROCEDURE replace_synonyms( p_db_link IN VARCHAR2 ) AS BEGIN -- Adjust the query to identify all the synonyms that you want to recreate FOR syn IN (SELECT * FROM user_synonyms WHERE db_link IS NOT NULL) LOOP EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM ' || syn.synonym_name || ' FOR ' || syn.table_owner || '.' || syn.table_name || '@' || p_db_link; END LOOP; END;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。