Condividi tramite


Schemi di messaggio per REF CURSORS

Ref CURSOR è un tipo di dati Oracle PL/SQL che rappresenta un puntatore a un set di risultati nel database Oracle. I tipi REF CURSOR consentono lo streaming di dati di input e output e sono ideali per il trasferimento di grandi quantità di dati da e verso un blocco di codice PL/SQL. L'adapter Microsoft BizTalk per Oracle Database offre il supporto per il passaggio di parametri REF CURSOR fortemente tipizzato e tipizzato in modo debole a routine e funzioni PL/SQL come parametri IN, OUT e IN OUT.

Nel database Oracle un tipo REF CURSOR può essere fortemente tipizzato o tipizzato in modo debole:

  • Un OGGETTO REF CURSOR fortemente tipizzato viene dichiarato con una clausola RETURN come in TYPE StrongCurType IS REF CURSOR RETURN emp%ROWTYPE;. Una variabile REF CURSOR fortemente tipizzata può rappresentare solo un set di risultati che contiene dati che corrispondono al tipo con cui viene dichiarato il tipo REF CURSOR. L'adattatore Oracle Database restituisce un set di risultati fortemente tipizzato per un REF CURSOR fortemente tipizzato.

  • Un REF CURSOR di tipo debole viene dichiarato senza una clausola RETURN come in TYPE WeakCurType IS REF CURSOR;. Oracle fornisce anche un tipo REF CURSOR speciale denominato SYS_REFCURSOR che può essere usato per dichiarare variabili REF CURSOR debolmente tipizzate. Le variabili REF CURSOR tipizzate in modo debole possono rappresentare un set di risultati che contiene qualsiasi tipo di dati di riga. L'adattatore Oracle Database restituisce un set di risultati di tipo debole di record generici per un CURSOR REF di tipo debole.

Parametri IN REF CURSOR

Non esiste ODP.NET'API per creare un REF CURSOR nel server Oracle, quindi l'adattatore Oracle Database non può fornire la funzionalità per creare e gestire variabili REF CURSOR per un programma client.

L'adattatore Oracle Database, tuttavia, consente a un client di passare parametri IN REF CURSOR a funzioni o stored procedure specificando un blocco di codice PL/SQL che restituisce un REF CURSOR. L'adattatore usa questo codice per creare e APRIRE una variabile REF CURSOR nel server Oracle; chiama quindi la funzione o la stored procedure usando questa variabile come parametro IN.

L'adattatore Oracle Database rappresenta i parametri IN REF CURSOR come stringhe che contengono il blocco di codice PL/SQL. All'interno di questo blocco, la posizione di REF CURSOR viene specificata con un punto interrogativo (?). Il blocco di codice PL/SQL può contenere un'istruzione OPEN-FOR che contiene una query SQL; oppure può contenere una chiamata di funzione o routine in cui viene restituito un REF CURSOR aperto in un parametro OUT.

Di seguito viene illustrato come specificare un OGGETTO IN REF CURSOR chiamando una stored procedure o una funzione per aprire REF CURSOR.

<[IN_REF_CURSOR_PARAM_NAME]>begin [SP_NAME]([SP_PARAMS...], ?, [SP_PARAMS...]); end;</[IN_REF_CURSOR_PARAM_NAME]>  
  
Example:  
<EMP_RC>begin GETEMP(1, ?); end; </EMP_RC>  

Di seguito viene illustrato come specificare un OGGETTO IN REF CURSOR utilizzando una query SELECT per aprire REF CURSOR.

<IN_REF_CURSOR_PARAM_NAME>begin open ? for select [FIELD_NAMES] from [TABLE_NAME]; end;</IN_REF_CURSOR_PARAM_NAME>  
  
Example:  
<EMP_RC>begin open ? for select * from EMP; end;</EMP_RC>  

Parametri OUT REF CURSOR

I parametri OUT REF CURSOR vengono restituiti come set di risultati fortemente tipizzato o debolmente tipizzato. Il tipo del set di risultati restituito dipende dal fatto che il parametro REF CURSOR sia dichiarato come un REF CURSOR fortemente tipizzato o debolmente tipizzato nella stored procedure o nella definizione di funzione nel server Oracle. Per i parametri REF CURSOR fortemente tipizzato viene restituito un set di risultati fortemente tipizzato e viene restituito un set di risultati con tipità debole per i parametri REF CURSOR di tipo debole, ad esempio i parametri dichiarati con un tipo di SYS_REFCURSOR.

Di seguito viene illustrato il codice XML per un parametro OUT REF CURSOR fortemente tipizzato.

<[PARAM_NAME]>  
 <[PARAM_NAME]RECORD>  
  <[COL1_NAME]>value1</[COL1_NAME]>  
  <[COL2_NAME]>value2</[COL2_NAME]>  
  ...  
 </[PARAM_NAME]RECORD>  
</[PARAM_NAME]>  
  
[PARAM_NAME] = OUT REF CURSOR parameter name; for example, EMP_REFCURSOR  
[COL_NAME] = Name of a column in the REF CURSOR type; for example, Name.  

Di seguito viene illustrato il codice XML per un parametro OUT REF CURSOR di tipo debole.

<[PARAM_NAME]>  
 <GenRecordRow xmlns="oracledb">  
  <GenRecordColumn>  
   <ColumnName>COL_NAME</ColumnName>  
   <ColumnValue>COL_VALUE</ColumnValue>  
   <ColumnType>COL_TYPE</ColumnType>  
  </GenRecordColumn>  
  …  
 </GenRecordRow>  
 …  
</[PARAM_NAME]>  
  
[COL_NAME] = Name of column; for example, Name  
[COL_VALUE] = Column value; for example, Scott  
[COL_TYPE] = Column data type; for example, System.String  

Parametri IN OUT REF CURSOR

Poiché i modelli di adattatore Oracle Database IN REF CURSOR parametri come stringhe e parametri OUT REF CURSOR come tipi complessi, non può supportare un singolo tipo per un parametro IN OUT REF CURSOR. Per questo motivo, considera i parametri IN OUT REF CURSOR come due parametri diversi: un parametro IN nel messaggio di richiesta e un parametro OUT nel messaggio di risposta.

Per evitare un conflitto di nomi nella programmazione del modello di servizio, l'adapter Oracle Database aggiunge la stringa "_IN" al parametro IN nel messaggio di richiesta in modo che per un determinato parametro denominato [PARAM_NAME], vengono creati due parametri:

  • [PARAM_NAME]_IN è un parametro IN REF CURSOR nella stored procedure o nel messaggio di richiesta di funzione. Contiene un'istruzione PL/SQL (una query select o una stored procedure o una chiamata di funzione) che restituisce un REF CURSOR.

  • [PARAM_NAME] è un parametro OUT REF CURSOR nel messaggio di risposta della stored procedure o della funzione. Contiene OUT REF CURSOR come set di risultati fortemente tipizzato o debolmente tipizzato.

Importante

L'adattatore non può supportare una routine o una funzione che contiene un parametro IN denominato [PARAM_NAME]_IN e un parametro IN OUT REF CURSOR denominato [PARAM_NAME]. Ciò è dovuto al fatto che l'adapter prevede un parametro denominato [PARAM_NAME]_IN rappresentare l'input per il parametro REF CURSOR e non è possibile specificare entrambi i parametri nel messaggio di richiesta.

Vedere anche

Messaggi e schemi di messaggio per l'adapter BizTalk per database Oracle