呼叫遠端procedure的2個問題

oracle_kai發表於2008-01-18

呼叫遠端procedure2個問題

昨天小組的開發人員在做一個專案的etl時候,問了關於呼叫遠端procedure的問題,如下:

問題一:因在etl中,第一步就需要執行遠端db上的一個procedure,是否可以在本地db

procedure上呼叫遠端某一db上的procedure

       

答:二臺dbdblink後,可在本地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部落格 ” ,連結:http://blog.itpub.net/10159839/viewspace-151167/,如需轉載,請註明出處,否則將追究法律責任。

相關文章