调用远程procedure的2个问题
昨天小组的开发人员在做一个项目的etl时候,问了关于调用远程procedure的问题,如下:
问题一:因在etl中,第一步就需要执行远程db上的一个procedure,是否可以在本地db
的procedure上调用远程某一db上的procedure?
答:二台db建dblink后,可在本地procedure中调用,用procedure_name@dblink_name 即
可,在sqlplus中,直接用exec procedure_name@dblink_name。
注:建dblink的用户要拥有execute 该过程的权限
问题二:有多个远程db需要做上面的事情,是否可以在本地procedure中传递dblink参数,
根据dblink参数来确定调用哪一个远程db的过程?
答:可以,需要用到动态sql语句,在procedure中调用如下sql语句,
Execute Immediate 'select '' procname@' ||v_dblink ||''' from dual' Into v_sql;
Execute Immediate 'begin '||v_sql||'; end;';
或者干脆不要上面的第一条sql拼装语句,直接用下面的一条语句
Execute Immediate 'begin '||' procname @' ||v_dblink||'; end;';
注意:如果直接用后面的语句会报错的
Execute immediate ‘procedure_name@’||v_dblink_name,
注意:建dblink的用户要拥有execute 该过程的权限
其中v_dblink 为过程传递的参数,procname为实际的过程名,这样可以再写一个过
程来调用这个过程,通过不同的dblink参数来调用不同地方的过程,这样既可以使代码
统一,也满足了基本的模块化需求。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10159839/viewspace-151167/ ,如需转载,请注明出处,否则将追究法律责任。