Oracle
 sql >> Database >  >> RDS >> Oracle

eseguito una procedura memorizzata Oracle dal server sql utilizzando la funzione di query aperta

Alla fine abbiamo individuato alcune soluzioni:la chiave del problema (per noi) è che per impostazione predefinita gli RPC sono disabilitati per i server collegati. I parametri per Rpc, Rpc Out e Use Remote Collation devono essere impostati su true. Maggiori informazioni:

http://blog.sqlauthority.com/2007/10/18/sql-server-2005-fix-error-msg-7411-level-16-state- 1-server-non-configurato-per-rpc/

La soluzione utilizzata dipenderà dai requisiti di output della procedura. Il primo esempio restituisce un valore di output. Nel secondo esempio non vengono restituiti valori di output (i dati vengono raccolti in una query successiva).

Esempio 1

La procedura T2T_collect_all ha due parametri di input (date di inizio e fine) e un parametro di output (conteggio righe).

DICHIARA @l_i_parameter1 varchar(10)

DICHIARA @l_i_parameter2 varchar(10)

DICHIARA @l_i_parameter3 varchar(10)

DICHIARA @l_i_parameter4 varchar(10)

DICHIARA @l_o_parameter1 intero

SET @l_i_parameter1 ='01/10/2009'

SET @l_i_parameter2 ='aaaa/mm/gg'

SET @l_i_parameter3 ='31/12/2009'

SET @l_i_parameter4 ='aaaa/mm/gg'

SET @l_o_parameter1 =0

ESEGUI ( 'inizia T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;', ​​

      @l_i_parameter1, 

      @l_i_parameter2,

      @l_i_parameter3, 

      @l_i_parameter4,

      @l_o_parameter1 OUTPUT

) IN ORA_DB;

Ulteriori informazioni:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx

Esempio 2a

La procedura T2T_collect_allx ha solo due parametri di input (data di inizio e data di fine).

ESEGUI ('inizio T2T_collect_allx (SYSDATE - 40, SYSDATE); fine;') ORA_DB;

Esempio 2b

SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')