Package DBMS_PIPE
DBMS_PIPE
permet à plusieurs sessions de la même instance de communiquer.
Oracle Autonomous Database prend en charge les fonctionnalités de base de DBMS_PIPE
telles que disponibles dans Oracle Database 19c, ainsi que les extensions.
Pour plus d'informations sur la fonctionnalité de base DBMS_PIPE
fournie dans Oracle Database, reportez-vous à DBMS_PIPE.
- DBMS_PIPE Présentation de Singleton Pipes
La fonctionnalité de pipe a plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes. - Récapitulatif des sous-programmes DBMS_PIPE pour les tubes simples
Ce tableau répertorie les sous-programmesDBMS_PIPE
et les décrit brièvement. - DBMS_PIPE Présentation des pipelines de messagerie persistants
La fonctionnalité de pipe comporte plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes. - Récapitulatif des sous-programmes DBMS_PIPE pour la messagerie persistante
Ce tableau répertorie les sous-programmesDBMS_PIPE
et les décrit brièvement.
Rubrique parent : Référence de package fourni avec Autonomous Database
DBMS_PIPE Présentation des tubes simples
La fonctionnalité Pipe a plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes.
Sur Autonomous Database, le package DBMS_PIPE a des fonctionnalités étendues pour prendre en charge les canaux singleton.
Les fonctionnalités de pipeline singleton dans DBMS_PIPE
fournissent les éléments suivants :
-
Possibilité de mettre en cache et d'extraire un message personnalisé de 32 767 octets maximum dans la mémoire de base de données Oracle. La taille de message maximale de 32 767 octets est applicable à tous les tubes, y compris les tubes simples. Les versions précédentes de
DBMS_PIPE
avaient une taille de message maximale plus petite. -
Partagez le message mis en cache entre plusieurs sessions de base de données avec des lectures simultanées.
-
Méthodes d'invalidation du cache :
- Invalidation de cache explicite contrôlée par l'utilisateur.
- Invalidation du cache après l'intervalle de temps (en secondes) d'un paramètre spécifié par l'utilisateur (
shelflife
).
-
API PL/SQL déclaratives et faciles à utiliser pour la mise en cache.
-
Prend en charge les bases de données en lecture seule et en lecture-écriture.
Un canal unique peut être l'un des types DBMS_PIPE
pris en charge :
- Tuyau implicite : créé automatiquement lorsqu'un message est envoyé avec un nom de tuyau inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE
. - Tuyau explicite : créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPE
avec un nom de tuyau spécifié par l'utilisateur. - Tuyau public : accessible par tout utilisateur disposant du droit d'accès
EXECUTE
sur le packageDBMS_PIPE
- Tuyau privé : accessible par les sessions avec le même utilisateur que le créateur de pipe.
Rubrique parent : Package DBMS_PIPE
Récapitulatif des sous-programmes DBMS_PIPE pour les tubes singleton
Ce tableau répertorie les sous-programmes DBMS_PIPE
et les décrit brièvement.
Tableau 6-1 Sous-programmes de package DBMS_PIPE
Sous-programme | Description |
---|---|
Crée un tuyau (nécessaire pour les tuyaux privés) |
|
Renvoie le type de données de l'élément suivant dans le tampon |
|
Crée un message dans la mémoire tampon locale |
|
Purge le contenu du tuyau nommé |
|
Copie le message du canal nommé dans le tampon local |
|
Purge le contenu du tampon local |
|
Supprime le tuyau nommé |
|
Envoie un message sur le canal nommé : crée implicitement un canal public si le canal nommé n'existe pas |
|
Renvoie un nom de session unique |
|
Accède à l'élément suivant dans le tampon |
- CREATE_PIPE Fonction
Cette fonction crée explicitement un canal public ou privé. Si l'indicateurprivate
estTRUE
, le créateur de canal est affecté en tant que propriétaire du canal privé. - RECEIVE_MESSAGE Fonction
Cette fonction copie le message dans le tampon de messages local. - SEND_MESSAGE Fonction
Cette fonction envoie un message sur le canal nommé.
Rubrique parent : Package DBMS_PIPE
Fonction CREATE_PIPE
Cette fonction crée explicitement un canal public ou privé. Si l'indicateur private
est TRUE
, le créateur de canal est affecté en tant que propriétaire du canal privé.
Les canaux créés explicitement ne peuvent être supprimés qu'en appelant REMOVE_PIPE
ou en arrêtant l'instance.
Pour créer un singleton pipe, définissez le paramètre singleton
sur TRUE
. Les arguments suivants sont applicables aux tubes singleton :
-
singleton
: indique que le canal doit être créé en tant que canal unique (valeur par défaut :FALSE
). -
shelflife
: indiquez éventuellement l'expiration du délai d'attente (en secondes) du message mis en cache dans le canal unique. Il peut être utilisé pour l'invalidation implicite d'un message dans Singleton Pipe.Le message
shelflife
dans Singleton Pipe peut également être spécifié lorsque vous envoyez un message (reportez-vous à Fonction SEND_MESSAGE).
Syntaxe
DBMS_PIPE.CREATE_PIPE ( pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 66536, private IN BOOLEAN DEFAULT TRUE, singleton IN BOOLEAN DEFAULT FALSE, shelflife IN INTEGER DEFAULT 0) RETURN INTEGER;
Paramètres
Tableau 6-2 Paramètres de fonction CREATE_PIPE
Paramètre | Description |
---|---|
|
Nom du pipeline que vous créez. Vous devez utiliser ce nom lorsque vous appelez Attention : n'utilisez pas de noms de pipe commençant par |
|
Taille maximale autorisée pour le pipeline, en octets. La taille totale de tous les messages sur le pipeline ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut de La valeur La valeur par défaut |
|
Utilise la valeur par défaut, Les canaux publics peuvent être implicitement créés lorsque vous appelez |
|
Utilisez La valeur par défaut est |
|
Délai d'expiration en secondes d'un message mis en cache dans Singleton Pipe. Une fois l'heure La valeur par défaut est |
Valeurs renvoyées
Tableau 6-3 Valeurs renvoyées par la fonction CREATE_PIPE
Retour | Description |
---|---|
|
Succès Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle renvoie 0, ce qui indique qu'il a réussi et toutes les données déjà présentes dans le canal restent. |
|
Echec de la conversion du pipeline existant en pipeline singleton.
|
|
Une valeur différente de zéro est indiquée pour le paramètre |
|
Echec en raison d'un conflit de noms. Si un canal portant le même nom existe et a été créé par un autre utilisateur, Oracle signale l'erreur |
Exceptions
Tableau 6-4 Exception de fonction CREATE_PIPE
Exception | Description |
---|---|
|
Erreur d'autorisation : un canal portant le même nom existe déjà et vous n'êtes pas autorisé à l'utiliser. |
Exemple
Créez un tuyau singleton avec un abri de 1 heure.
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(pipename => 'MY_PIPE1',
private => TRUE,
singleton => TRUE,
shelflife => 3600);
END;
/
Rubrique parent : Récapitulatif des sous-programmes DBMS_PIPE pour Singleton Pipes
Fonction RECEIVE_MESSAGE
Cette fonction copie le message dans le tampon de messages local.
Syntaxe
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, cache_func IN VARCHAR2 DEFAULT NULL) RETURN INTEGER;
Paramètres
Tableau 6-5 Paramètres de fonction RECEIVE_MESSAGE
Paramètre | Description |
---|---|
|
Nom du canal sur lequel vous souhaitez recevoir un message. Les noms commençant par |
|
Temps d'attente d'un message, en secondes. Un délai d'attente de 0 vous permet de lire sans bloquer. Le délai d'expiration n'inclut pas le temps passé dans la fonction de cache d'exécution indiquée dans le paramètre Valeur par défaut : constante |
|
Cachez le nom de la fonction pour mettre automatiquement en cache un message dans un canal unique. Le nom de la fonction doit être entièrement qualifié avec le schéma propriétaire :
La valeur par défaut est |
Valeurs renvoyées
Tableau 6-6 RECEIVE_MESSAGE Valeurs renvoyées par la fonction
Retour | Description |
---|---|
|
Succès |
|
Le délai a expiré. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
L'enregistrement dans le tuyau est trop volumineux pour le tampon. |
|
Une interruption s'est produite. |
8 |
La fonction de cache ne peut être spécifiée que lorsque vous utilisez un canal unique. |
|
L'utilisateur ne dispose pas de privilèges suffisants pour lire à partir du canal. |
Notes d'utilisation
Pour recevoir un message d'un canal, appelez d'abord RECEIVE_MESSAGE
. Lorsque vous recevez un message, il est retiré du canal ; par conséquent, un message ne peut être reçu qu'une seule fois. Pour les tuyaux créés implicitement, le tuyau est supprimé une fois que le dernier enregistrement a été supprimé du tuyau.
Si le canal que vous indiquez lorsque vous appelez RECEIVE_MESSAGE
n'existe pas déjà, Oracle crée implicitement le canal et attend de recevoir le message. Si le message n'arrive pas dans un délai d'attente défini, l'appel revient et le canal est supprimé.
Une fois le message reçu, vous devez passer un ou plusieurs appels à UNPACK_MESSAGE
pour accéder aux éléments individuels du message. La procédure UNPACK_MESSAGE
est surchargée pour décompresser les éléments de type DATE
, NUMBER
, VARCHAR2
. Il existe deux procédures supplémentaires pour décompresser les éléments RAW
et ROWID
. Si vous ne connaissez pas le type de données que vous tentez de décompresser, appelez NEXT_ITEM_TYPE
pour déterminer le type de l'élément suivant dans le tampon.
Paramètre de fonction de cache
Singleton Pipes prend en charge la fonction de cache pour mettre automatiquement en cache un message dans le canal dans le cas des deux scénarios suivants :
- Singleton Pipe est vide.
- Le message dans le canal unique n'est pas valide en raison d'un délai de
shelflife
.
Le nom de la fonction doit être entièrement qualifié avec le schéma propriétaire :
OWNER.FUNCTION_NAME
OWNER.PACKAGE.FUNCTION_NAME
Pour utiliser une fonction de cache, l'utilisateur de session en cours qui appelle DBMS_PIPE.RECEIVE_MESSAGE
doit disposer des privilèges requis pour exécuter la fonction de cache.
Syntaxe de la fonction de cache
CREATE OR REPLACE FUNCTION cache_function_name (
pipename IN VARCHAR2
) RETURN INTEGER;
Paramètre | Type de données | Description |
---|---|---|
|
VARCHAR2 |
Nom de la canalisation unique. |
Retour | Description |
---|---|
0 | Succès |
Non nul | Valeur d'échec renvoyée par DBMS_PIPE.RECEIVE_MESSAGE |
Définissez une fonction de cache pour fournir l'encapsulation et l'abstraction de la complexité des sessions de lecture de Singleton Pipe. Les opérations standard d'une fonction de cache sont les suivantes :
- Créez un canal unique, pour un canal explicite, à l'aide de
DBMS_PIPE.CREATE_PIPE
. - Créez le message à mettre en cache dans le singleton pipe.
- Envoyez un message à Singleton Pipe, en spécifiant éventuellement un
shelflife
pour le message implicite.
Exceptions
Tableau 6-7 Exceptions de fonction RECEIVE_MESSAGE
Exception | Description |
---|---|
|
Erreur d'autorisation. Privilège insuffisant pour supprimer l'enregistrement du canal. Le tuyau appartient à quelqu'un d'autre. |
Exemple
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.receive_message(pipename => 'MY_PIPE1',
timeout => 1,
cache_func => 'MY_USER.MY_CACHE_FUNC');
END;
/
Rubrique parent : Récapitulatif des sous-programmes DBMS_PIPE pour Singleton Pipes
Fonction SEND_MESSAGE
Cette fonction envoie un message sur le pipeline nommé.
Le message est contenu dans le tampon de message local, qui a été rempli d'appels à PACK_MESSAGE
. Vous pouvez créer un canal explicitement à l'aide de CREATE_PIPE
. Sinon, il est créé implicitement.
Pour créer un canal unique implicite, définissez le paramètre singleton
sur TRUE
. Les arguments suivants sont applicables aux tubes singleton :
singleton
: indique que le canal doit être créé en tant que canal unique (valeur par défaut :FALSE
).shelflife
: indiquez éventuellement l'expiration de la durée de conservation du message mis en cache dans le singleton pipe. Il peut être utilisé pour l'invalidation implicite d'un message dans Singleton Pipe.Cet argument est applicable aux tubes Singleton implicites et explicites. Une valeur
shelflife
spécifiée dans la fonction SEND_MESSAGE remplace la valeurshelflife
spécifiée pour le canal unique explicite dans la fonction CREATE_PIPE et sera la valeur par défaut pour tout nouveau message mis en cache dans le canal unique.
Syntaxe
DBMS_PIPE.SEND_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize IN INTEGER DEFAULT 65536, singleton IN BOOLEAN DEFAULT FALSE, shelflife IN INTEGER DEFAULT 0) RETURN INTEGER;
Paramètres
Tableau 6-8 Paramètres de fonction SEND_MESSAGE
Paramètre | Description |
---|---|
|
Nom du canal sur lequel vous voulez placer le message. Si vous utilisez un canal explicite, il s'agit du nom que vous avez indiqué lorsque vous avez appelé Attention : n'utilisez pas de noms de pipe commençant par ' |
|
Temps d'attente lors de la tentative de placement d'un message sur un canal, en secondes. La valeur par défaut est la constante |
|
Taille maximale autorisée pour le pipeline, en octets. La taille totale de tous les messages sur le pipeline ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La longueur par défaut est de 65536 octets. La valeur Si vous indiquez La valeur par défaut |
|
Utilisez La valeur par défaut est |
|
Délai d'expiration en secondes d'un message mis en cache dans Singleton Pipe. Une fois l'heure La valeur par défaut est |
Valeurs renvoyées
Tableau 6-9 SEND_MESSAGE Valeurs renvoyées par la fonction
Retour | Description |
---|---|
|
Succès. Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle renvoie 0, ce qui indique qu'il a réussi et toutes les données déjà présentes dans le canal restent. Si un utilisateur connecté en tant que |
|
Le délai a expiré. Cette procédure peut expirer soit parce qu'elle ne peut pas obtenir un verrou sur le tuyau, soit parce que le tuyau reste trop plein pour être utilisé. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
Une interruption s'est produite. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
Echec de la conversion du pipeline existant en pipeline singleton.
|
|
Une valeur différente de zéro est indiquée pour le paramètre |
|
Privilèges insuffisants. Si un canal portant le même nom existe et a été créé par un autre utilisateur, Oracle signale l'erreur |
Exceptions
Tableau 6-10 Exception de fonction SEND_MESSAGE
Exception | Description |
---|---|
|
Erreur d'autorisation. Privilège insuffisant pour écrire dans le pipe. Le tuyau est privé et appartient à quelqu'un d'autre. |
Rubrique parent : Récapitulatif des sous-programmes DBMS_PIPE pour Singleton Pipes
DBMS_PIPE Présentation des pipelines de messagerie persistants
La fonctionnalité Pipe a plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes.
Sur Autonomous Database, le package DBMS_PIPE dispose de fonctionnalités étendues pour prendre en charge les canaux de messagerie persistants.
Messages persistants dans DBMS_PIPE
:
-
Prendre en charge la possibilité d'envoyer et de récupérer des messages très volumineux.
-
Prise en charge d'un grand nombre de messages de canal.
-
Prendre en charge le partage de messages au sein d'une seule base de données, entre plusieurs bases de données et entre différentes bases de données dans différentes régions.
-
Prise en charge de plusieurs canaux à l'aide du même URI d'emplacement de banque d'objets cloud.
La fonctionnalité de messagerie persistante permet à plusieurs sessions de base de données de communiquer avec les messages stockés dans la banque d'objets cloud. L'utilisation de ces messages de fonctionnalité dans un canal peut être mise à la disposition de la base de données en cours uniquement ou de plusieurs bases de données dans la même région ou dans différentes régions.
Un canal de messagerie persistant peut être l'un des types
DBMS_PIPE
pris en charge :- Tuyau implicite : créé automatiquement lorsqu'un message est envoyé avec un nom de tuyau inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE
. - Tuyau explicite : créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPE
avec un nom de tuyau spécifié par l'utilisateur. - Public Pipe : accessible par tout utilisateur disposant du droit d'accès
EXECUTE
sur le packageDBMS_PIPE
. - Tuyau privé : accessible par les sessions avec le même utilisateur que le créateur de pipe.
- Tuyau implicite : créé automatiquement lorsqu'un message est envoyé avec un nom de tuyau inconnu à l'aide de la fonction
Lorsque vous envoyez et recevez des messages dans différentes bases de données à l'aide de messages persistants, Oracle vous recommande d'appeler
DBMS_PIPE.CREATE_PIPE
avant d'envoyer ou de recevoir des messages. La création d'un canal explicite avec DBMS_PIPE.CREATE_PIPE
garantit qu'un canal est créé avec les droits d'accès souhaités, publics ou privés (en définissant le paramètre PRIVATE
sur FALSE
ou en utilisant la valeur par défaut TRUE
).
DBMS_PIPE Limitation
Le package DBMS_PIPE
ne prend pas en charge l'envoi de messages entre les bases de données qui utilisent des jeux de caractères différents. Par exemple, si vous avez une instance Autonomous Database qui utilise AL32UTF8 et une autre instance qui utilise WE8MSWIN1252, vous ne pouvez pas envoyer de messages avec DBMS_PIPE
entre ces deux bases de données. Dans ce cas, le système génère l'erreur ORA-12704
si vous tentez d'envoyer des messages avec DBMS_PIPE
entre ces deux bases de données.
Pour plus d'informations, reportez-vous à Choix d'un jeu de caractères pour Autonomous Database.
Rubrique parent : Package DBMS_PIPE
Récapitulatif des sous-programmes DBMS_PIPE pour la messagerie persistante
Ce tableau répertorie les sous-programmes DBMS_PIPE
et les décrit brièvement.
Tableau 6-11 Sous-programmes du package DBMS_PIPE
Sous-programme | Description |
---|---|
Crée un tuyau (nécessaire pour les tuyaux privés). |
|
Renvoie la valeur globale de la variable |
|
Renvoie la valeur de variable |
|
Renvoie le type de données de l'élément suivant dans le tampon. |
|
Crée un message dans la mémoire tampon locale. |
|
Copie le message du pipeline nommé dans le tampon local. |
|
Purge le contenu du tampon local. |
|
Supprime le pipe nommé. |
|
Envoie un message sur un canal nommé : cela crée implicitement un canal public si le canal nommé n'existe pas. |
|
Définit la variable |
|
Définit la variable |
|
Renvoie un nom de session unique. |
|
Permet d'accéder à l'élément suivant dans le tampon. |
- CREATE_PIPE Fonction
Cette fonction crée explicitement un canal public ou privé. Si l'indicateurprivate
estTRUE
, le créateur de canal est affecté en tant que propriétaire du canal privé. - GET_CREDENTIAL_NAME Fonction
Cette fonction renvoie la valeur de variablecredential_name
globale à utiliser lorsque les messages sont stockés dans la banque d'objets cloud. - GET_LOCATION_URI Fonction
Cette fonction renvoie la valeur de variablelocation_uri
globale qui peut être utilisée comme URI d'emplacement par défaut lorsque les messages de canal sont stockés dans la banque d'objets cloud. - RECEIVE_MESSAGE Fonction
Cette fonction copie le message dans le tampon de messages local. - SEND_MESSAGE Fonction
Cette fonction envoie un message sur le canal nommé. - Procédure SET_CREDENTIAL_NAME
Cette procédure définit la variablecredential_name
qui est utilisée comme informations d'identification par défaut lorsque les messages de canal sont stockés dans la banque d'objets cloud. - Procédure SET_LOCATION_URI
Cette procédure définit la variablelocation_uri
globale.
Rubrique parent : Package DBMS_PIPE
Fonction CREATE_PIPE
Cette fonction crée explicitement un canal public ou privé. Si l'indicateur private
est TRUE
, le créateur de canal est affecté en tant que propriétaire du canal privé.
Les canaux créés explicitement ne peuvent être supprimés qu'en appelant REMOVE_PIPE
ou en arrêtant l'instance.
Syntaxe
DBMS_PIPE.CREATE_PIPE ( pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 66536, private IN BOOLEAN DEFAULT TRUE) RETURN INTEGER;
Paramètres
Tableau 6-12 Paramètres de fonction CREATE_PIPE
Paramètre | Description |
---|---|
|
Nom du pipeline que vous créez. Vous devez utiliser ce nom lorsque vous appelez Attention : n'utilisez pas de noms de pipe commençant par |
|
Taille maximale autorisée pour le pipeline, en octets. La taille totale de tous les messages sur le pipeline ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut de La valeur La valeur par défaut |
|
Utilise la valeur par défaut, Les canaux publics peuvent être implicitement créés lorsque vous appelez |
Valeurs renvoyées
Tableau 6-13 Valeurs renvoyées par la fonction CREATE_PIPE
Retour | Description |
---|---|
|
Succès Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle renvoie 0, ce qui indique qu'il a réussi et toutes les données déjà présentes dans le canal restent. |
|
Echec en raison d'un conflit de noms. Si un canal portant le même nom existe et a été créé par un autre utilisateur, Oracle signale l'erreur |
Exceptions
Tableau 6-14 Exception de fonction CREATE_PIPE
Exception | Description |
---|---|
|
Erreur d'autorisation : un canal portant le même nom existe déjà et vous n'êtes pas autorisé à l'utiliser. |
Exemple
Créer une valeur privée explicite nommée MY_PIPE1
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(
pipename => 'MY_PIPE1',
private => TRUE);
END;
/
Fonction GET_CREDENTIAL_NAME
Cette fonction renvoie la valeur de variable credential_name
globale à utiliser lorsque les messages sont stockés dans la banque d'objets cloud.
Syntaxe
DBMS_PIPE.GET_CREDENTIAL_NAME RETURN VARCHAR2;
Valeurs renvoyées
Valeur de retour | Description |
---|---|
|
Nom des informations d'identification permettant d'accéder au stockage d'objet cloud. |
Exemple
DECLARE
credential_name VARCHAR2(400)
BEGIN
credential_name := DBMS_PIPE.GET_CREDENTIAL_NAME;
END;
/
Fonction GET_LOCATION_URI
Cette fonction renvoie la valeur de variable location_uri
globale qui peut être utilisée comme URI d'emplacement par défaut lorsque les messages de canal sont stockés dans la banque d'objets cloud.
Syntaxe
DBMS_PIPE.GET_LOCATION_URI RETURN VARCHAR2;
Valeur de retour
Valeur de retour | Description |
---|---|
location_uri |
URI d'objet. |
Exemple
DECLARE
location_uri VARCHAR2(400)
BEGIN
location_uri := DBMS_PIPE.GET_LOCATION_URI;
END;
/
Fonction RECEIVE_MESSAGE
Cette fonction copie le message dans le tampon de messages local.
Syntaxe
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2) RETURN INTEGER;
Paramètres
Tableau 6-15 Paramètres de fonction RECEIVE_MESSAGE
Paramètre | Description |
---|---|
|
Nom du canal sur lequel vous souhaitez recevoir un message. Les noms commençant par |
|
Temps d'attente d'un message, en secondes. Un délai d'attente de 0 vous permet de lire sans bloquer. Le délai d'expiration n'inclut pas le temps passé à exécuter la fonction de cache indiquée avec le paramètre Valeur par défaut : constante |
|
Nom des informations d'identification de la banque cloud utilisée pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler L'objet d'informations d'identification doit disposer des privilèges La valeur |
|
URI d'emplacement de la banque cloud utilisée pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler |
Valeurs renvoyées
Tableau 6-16 Valeurs renvoyées par la fonction RECEIVE_MESSAGE
Retour | Description |
---|---|
|
Succès |
|
Le délai a expiré. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
L'enregistrement dans le tuyau est trop volumineux pour le tampon. |
|
Une interruption s'est produite. |
|
L'utilisateur ne dispose pas de privilèges suffisants pour lire à partir du canal. |
Notes d'utilisation
-
Pour recevoir un message d'un canal, appelez d'abord
RECEIVE_MESSAGE
. Lorsque vous recevez un message, il est retiré du canal ; par conséquent, un message ne peut être reçu qu'une seule fois. Pour les tuyaux créés implicitement, le tuyau est supprimé une fois que le dernier enregistrement a été supprimé du tuyau. -
Si le canal que vous indiquez lorsque vous appelez
RECEIVE_MESSAGE
n'existe pas déjà, Oracle crée implicitement le canal et attend de recevoir le message. Si le message n'arrive pas dans un délai d'attente défini, l'appel revient et le canal est supprimé. -
Une fois le message reçu, vous devez passer un ou plusieurs appels à
UNPACK_MESSAGE
pour accéder aux éléments individuels du message. La procédureUNPACK_MESSAGE
est surchargée pour décompresser les éléments de typeDATE
,NUMBER
,VARCHAR2
. Il existe deux procédures supplémentaires pour décompresser les élémentsRAW
etROWID
. Si vous ne connaissez pas le type de données que vous tentez de décompresser, appelezNEXT_ITEM_TYPE
pour déterminer le type de l'élément suivant dans le tampon. -
Il est garanti que les messages persistants sont écrits ou lus par un seul processus. Cela évite les incohérences de contenu de message dues à des écritures et des lectures simultanées. A l'aide d'un canal de messagerie persistant,
DBMS_PIPE
permet qu'une seule opération, l'envoi d'un message ou un message de réception, soit active à un moment donné. Toutefois, si une opération n'est pas possible en raison d'une opération en cours, le processus tente de nouveau régulièrement jusqu'à ce que la valeurtimeout
soit atteinte. -
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs Oracle Cloud Infrastructure ou des URI Swift. Cependant, l'URI d'emplacement et les informations d'identification doivent correspondre au type suivant :
-
Si vous utilisez un format d'URI natif pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser l'authentification des clés de signature Oracle Cloud Infrastructure natives dans l'objet d'informations d'identification.
-
Si vous utilisez le format d'URI Swift pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser une authentification par jeton d'authentification dans l'objet d'informations d'identification.
-
Exceptions
Tableau 6-17 Exceptions de fonction RECEIVE_MESSAGE
Exception | Description |
---|---|
|
Erreur d'autorisation. Privilège insuffisant pour supprimer l'enregistrement du canal. Le tuyau appartient à quelqu'un d'autre. |
Fonction SEND_MESSAGE
Cette fonction envoie un message sur le pipeline nommé.
Le message est contenu dans le tampon de message local, qui a été rempli d'appels à PACK_MESSAGE
. Vous pouvez créer un canal explicitement à l'aide de CREATE_PIPE
. Sinon, il est créé implicitement.
Syntaxe
DBMS_PIPE.SEND_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2 ) RETURN INTEGER;
Paramètres
Tableau 6-18 Paramètres de fonction SEND_MESSAGE
Paramètre | Description |
---|---|
credential_name |
Nom des informations d'identification de la banque cloud utilisée pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler L'objet d'informations d'identification doit disposer des privilèges La valeur |
location_uri |
URI d'emplacement de la banque cloud utilisée pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler |
|
Taille maximale autorisée pour le pipeline, en octets. La taille totale de tous les messages sur le pipeline ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La longueur par défaut est de 65536 octets. La valeur Si vous indiquez La valeur par défaut |
|
Nom du canal sur lequel vous voulez placer le message. Si vous utilisez un canal explicite, il s'agit du nom que vous avez indiqué lorsque vous avez appelé Attention : n'utilisez pas de noms de pipe commençant par ' |
|
Temps d'attente lors de la tentative de placement d'un message sur un canal, en secondes. La valeur par défaut est la constante |
Valeurs renvoyées
Tableau 6-19 Valeurs renvoyées par la fonction SEND_MESSAGE
Retour | Description |
---|---|
|
Succès. Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle renvoie 0, ce qui indique qu'il a réussi et toutes les données déjà présentes dans le canal restent. Si un utilisateur connecté en tant que |
|
Le délai a expiré. Cette procédure peut expirer soit parce qu'elle ne peut pas obtenir un verrou sur le tuyau, soit parce que le tuyau reste trop plein pour être utilisé. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
Une interruption s'est produite. Si le tuyau a été implicitement créé et est vide, il est enlevé. |
|
Privilèges insuffisants. Si un canal portant le même nom existe et a été créé par un autre utilisateur, Oracle signale l'erreur |
Notes d'utilisation
-
Il est garanti que les messages persistants sont écrits ou lus par un seul processus. Cela évite les incohérences de contenu de message dues à des écritures et des lectures simultanées. A l'aide d'un canal de messagerie persistant,
DBMS_PIPE
permet qu'une seule opération, l'envoi d'un message ou un message de réception, soit active à un moment donné. Toutefois, si une opération n'est pas possible en raison d'une opération en cours, le processus tente de nouveau régulièrement jusqu'à ce que la valeurtimeout
soit atteinte. -
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs Oracle Cloud Infrastructure ou des URI Swift. Cependant, l'URI d'emplacement et les informations d'identification doivent correspondre au type suivant :
-
Si vous utilisez un format d'URI natif pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser l'authentification des clés de signature Oracle Cloud Infrastructure natives dans l'objet d'informations d'identification.
-
Si vous utilisez le format d'URI Swift pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser une authentification par jeton d'authentification dans l'objet d'informations d'identification.
-
Exceptions
Tableau 6-20 Exception de fonction SEND_MESSAGE
Exception | Description |
---|---|
|
Erreur d'autorisation. Privilège insuffisant pour écrire dans le pipe. Le tuyau est privé et appartient à quelqu'un d'autre. |
Procédure SET_CREDENTIAL_NAME
Cette procédure définit la variable credential_name
qui est utilisée comme informations d'identification par défaut lorsque les messages de canal sont stockés dans la banque d'objets cloud.
Syntaxe
DBMS_PIPE.SET_CREDENTIAL_NAME ( credential_name IN VARCHAR2 );
Paramètres
Paramètre | Description |
---|---|
|
Nom des informations d'identification permettant d'accéder au stockage d'objet cloud. La valeur |
Remarque sur l'utilisation
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs Oracle Cloud Infrastructure ou des URI Swift. Cependant, l'URI d'emplacement et les informations d'identification doivent correspondre au type suivant :
-
Si vous utilisez un format d'URI natif pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser l'authentification des clés de signature Oracle Cloud Infrastructure natives dans l'objet d'informations d'identification.
-
Si vous utilisez le format d'URI Swift pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser une authentification par jeton d'authentification dans l'objet d'informations d'identification.
Exemple
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME(
credential_name => 'my_cred1');
END;
/
Procédure SET_LOCATION_URI
Cette procédure définit la variable location_uri
globale.
Syntaxe
DBMS_PIPE.SET_LOCATION_URI ( location_uri IN VARCHAR2 );
Paramètre
Paramètre | Description |
---|---|
location_uri |
URI de l'objet ou du fichier. Le format de l'URI dépend du service Cloud Object Storage que vous utilisez. Pour obtenir plus de détails, reportez-vous àFormats d'URI DBMS_CLOUD. |
Remarque sur l'utilisation
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs Oracle Cloud Infrastructure ou des URI Swift. Cependant, l'URI d'emplacement et les informations d'identification doivent correspondre au type suivant :
-
Si vous utilisez un format d'URI natif pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser l'authentification des clés de signature Oracle Cloud Infrastructure natives dans l'objet d'informations d'identification.
-
Si vous utilisez le format d'URI Swift pour accéder à Oracle Cloud Infrastructure Object Storage, vous devez utiliser une authentification par jeton d'authentification dans l'objet d'informations d'identification.
Exemple
BEGIN
DBMS_PIPE.GET_LOCATION_URI(
location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/