读书人

存储过程中 怎么建立dblink

发布时间: 2012-02-29 16:44:11 作者: rapoo

存储过程中 如何建立dblink?
create or replace procedure emis_to_nc_change(
av_emis in varchar2,
av_type in varchar2,
av_user in varchar2,
av_password in varchar2,
av_connect in varchar2,
av_nc out char,


av_errid out integer,
av_errtext out varchar2) is
v_sql varchar2(400);


begin


v_sql := 'CREATE DATABASE LINK nc.us.oracle.com CONNECT TO ufadmin IDENTIFIED BY ufadmin USING " ' ¦ ¦ 'emiswanshan ' ¦ ¦ ' " ';
EXECUTE IMMEDIATE v_sql

select pk_deptdoc
into av_nc
from bd_deptdoc@nc.us.oracle.com
where deptcode = '2H12D30 ';
EXECUTE IMMEDIATE 'ALTER SESSION CLOSE DATABASE LINK nc.us.oracle.com ';
EXECUTE IMMEDIATE 'DROP DATABASE LINK nc.us.oracle.com ';



end emis_to_nc_change;

在编译的时候 提示Compilation errors for PROCEDURE EMIS.EMIS_TO_NC_CHANGE

Error: PL/SQL: ORA-04052: 在查找远程对象 UFADMIN.BD_DEPTDOC@NC.US.ORACLE.COM 时出错
ORA-00604: 递归 SQL 层 1 出现错误
ORA-12154: TNS: 无法处理服务名




[解决办法]
DB link何要在Procedure里建呢?
一server要建的DBLink吧,
直接先Create,再直接引用比好吧....
[解决办法]
什么情况下非要在存储过程里—BLINK?
就算你在存储过程中写上—BLINK的代码,也同样是一次创建,之后再运行会提示已经存在该对象;而且用户名密码以及TNS服务名一旦变了的话你不得不修改存储过程。
[解决办法]
编译的时候,nc.us.oracle.com 这个dblink还没创建,编译肯定不过。
把那个select语句也改用动态sql可能就行了。

读书人网 >oracle

热点推荐