Schémas de message pour REF CURSORS
Un CURSEUR REF est un type de données Oracle PL/SQL qui représente un pointeur vers un jeu de résultats dans la base de données Oracle. Les types REF CURSOR permettent la diffusion en continu d’entrée et de sortie de données et sont idéaux pour transférer de grandes quantités de données vers et depuis un bloc de code PL/SQL. L’adaptateur Microsoft BizTalk pour Oracle Database prend en charge le passage de paramètres REF CURSOR fortement typés et faiblement typés à des procédures PL/SQL et des fonctions en tant que paramètres IN, OUT et IN OUT.
Dans la base de données Oracle, un type REF CURSOR peut être fortement typé ou faiblement typé :
Un CURSEUR REF fortement typé est déclaré avec une clause RETURN comme dans
TYPE StrongCurType IS REF CURSOR RETURN emp%ROWTYPE;
. Une variable REF CURSOR fortement typée ne peut représenter qu’un jeu de résultats qui contient des données correspondant au type avec lequel son type REF CURSOR est déclaré. L’adaptateur Oracle Database retourne un jeu de résultats fortement typé pour un CURSEUR REF fortement typé.Un CURSEUR REF faiblement typé est déclaré sans clause RETURN comme dans
TYPE WeakCurType IS REF CURSOR;
. Oracle fournit également un type REF CURSOR spécial appelé SYS_REFCURSOR qui peut être utilisé pour déclarer des variables REF CURSOR faiblement typées. Les variables REF CURSOR faiblement typées peuvent représenter un jeu de résultats qui contient n’importe quel type de données de ligne. L’adaptateur Oracle Database retourne un jeu de résultats faiblement typé d’enregistrements génériques pour un CURSEUR REF faiblement typé.
IN REF CURSOR Parameters
Il n’existe pas d’API ODP.NET pour créer un CURSEUR REF sur le serveur Oracle, de sorte que l’adaptateur Oracle Database ne peut pas fournir la possibilité à un programme client de créer et de gérer des variables REF CURSOR.
Toutefois, l’adaptateur Oracle Database permet à un client de passer des paramètres IN REF CURSOR à des fonctions ou des procédures stockées en spécifiant un bloc de code PL/SQL qui retourne un CURSEUR REF. L’adaptateur utilise ce code pour créer et ouvrir une variable REF CURSOR sur le serveur Oracle ; il appelle ensuite la fonction ou la procédure stockée à l’aide de cette variable comme paramètre IN.
L’adaptateur Oracle Database représente les paramètres IN REF CURSOR sous forme de chaînes qui contiennent le bloc de code PL/SQL. Dans ce bloc, l’emplacement du CURSEUR REF est spécifié avec un point d’interrogation ( ?). Le bloc de code PL/SQL peut contenir une instruction OPEN-FOR qui contient une requête SQL ; ou il peut contenir un appel de fonction ou de procédure dans lequel un CURSEUR REF ouvert est retourné dans un paramètre OUT.
L’exemple suivant montre comment spécifier un CURSEUR IN REF en appelant une procédure stockée ou une fonction pour ouvrir le CURSEUR REF.
<[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>
L’exemple suivant montre comment spécifier un CURSEUR IN REF à l’aide d’une requête SELECT pour ouvrir le CURSEUR REF.
<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>
PARAMÈTRES OUT REF CURSOR
Les paramètres OUT REF CURSOR sont retournés en tant que jeux de résultats fortement typés ou faiblement typés. Le type du jeu de résultats retourné varie selon que le paramètre REF CURSOR est déclaré comme un CURSEUR REF fortement typé ou faiblement typé dans la procédure stockée ou la définition de fonction sur le serveur Oracle. Un jeu de résultats fortement typé est retourné pour les paramètres REF CURSOR fortement typés et un jeu de résultats faiblement typé est retourné pour les paramètres REF CURSOR faiblement typés (par exemple, les paramètres déclarés avec un type SYS_REFCURSOR).
Voici le code XML d’un paramètre OUT REF CURSOR fortement typé.
<[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.
Voici le code XML d’un paramètre OUT REF CURSOR faiblement typé.
<[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
IN OUT REF CURSOR Parameters
Étant donné que l’adaptateur Oracle Database modélise les paramètres IN REF CURSOR en tant que chaînes et les paramètres OUT REF CURSOR en tant que types complexes, il ne peut pas prendre en charge un type unique pour un paramètre IN OUT REF CURSOR. Pour cette raison, il traite les paramètres IN OUT REF CURSOR comme deux paramètres différents : un paramètre IN dans le message de demande et un paramètre OUT dans le message de réponse.
Pour éviter un conflit de noms dans la programmation du modèle de service, l’adaptateur Oracle Database ajoute la chaîne « _IN » au paramètre IN dans le message de demande afin que pour un paramètre donné nommé [PARAM_NAME], deux paramètres soient créés :
[PARAM_NAME]_IN est un paramètre IN REF CURSOR dans la procédure stockée ou le message de demande de fonction. Il contient une instruction PL/SQL (une requête select ou une procédure stockée ou un appel de fonction) qui retourne un CURSEUR REF.
[PARAM_NAME] est un paramètre OUT REF CURSOR dans la procédure stockée ou le message de réponse de fonction. Il contient le CURSEUR OUT REF en tant que jeu de résultats fortement typé ou faiblement typé.
Important
L’adaptateur ne peut pas prendre en charge une procédure ou une fonction qui contient un paramètre IN nommé [PARAM_NAME]_IN et un paramètre IN OUT REF CURSOR nommé [PARAM_NAME]. En effet, l’adaptateur s’attend à ce qu’un paramètre nommé [PARAM_NAME]_IN représente l’entrée du paramètre REF CURSOR, et vous ne pouvez pas spécifier les deux paramètres dans le message de demande.
Voir aussi
Messages et schémas de message pour l’adaptateur BizTalk pour Oracle Database