Ensemble DBMS_PIPE
DBMS_PIPE permet à deux sessions ou plus dans la même instance de communiquer.
Oracle Autonomous AI Database prend en charge la fonctionnalité DBMS_PIPE de base, disponible dans Oracle Database 19c, plus les extensions.
Voir DBMS_PIPE pour plus de détails sur la fonctionnalité DBMS_PIPE de base fournie dans Oracle Database.
- DBMS_PIPE Aperçu pour Singleton Pipes
La fonctionnalité de tuyau offre plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes. - Sommaire des sous-programmes DBMS_PIPE pour les canalisations Singleton
Ce tableau répertorie les sous-programmesDBMS_PIPEet les décrit brièvement. - DBMS_PIPE Overview for Persistent Messaging Pipes
Pipe functionality has several potential applications: external service interface, debugging, independent transactions, and alerts. - Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
Ce tableau répertorie les sous-programmesDBMS_PIPEet les décrit brièvement.
DBMS_PIPE Aperçu pour Singleton Pipes
La fonctionnalité de canal comporte plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes.
Dans Autonomous AI Database, l'ensemble DBMS_PIPE offre des fonctionnalités étendues pour la prise en charge des canalisations singleton.
Les fonctions de tuyau Singleton dans DBMS_PIPE fournissent les éléments suivants :
-
Possibilité de mettre en mémoire cache et d'extraire un message personnalisé d'un maximum de 32 767 octets dans la mémoire de la base de données Oracle. La taille maximale du message de 32 767 octets s'applique à tous les tuyaux, y compris les tuyaux Singleton. La taille maximale des messages des versions précédentes de
DBMS_PIPEétait 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 explicite du cache contrôlée par l'utilisateur.
- Invalidation du cache après l'intervalle de temps d'un paramètre spécifié par l'utilisateur (
shelflife) (en secondes).
-
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 tuyau Singleton peut être l'un des types DBMS_PIPE pris en charge :
- Canal implicite : Créé automatiquement lorsqu'un message est envoyé avec un nom de canal inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE. - Canal explicite : Créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPEavec un nom de canal spécifié par l'utilisateur. - Public Pipe : Accessible par tout utilisateur disposant de l'autorisation
EXECUTEsur l'ensembleDBMS_PIPE - Canal privé : Accessible par des sessions avec le même utilisateur que le créateur du canal.
Rubrique parent : Ensemble DBMS_PIPE
Sommaire des sous-programmes DBMS_PIPE pour Singleton Pipes
Ce tableau répertorie les sous-programmes DBMS_PIPE et les décrit brièvement.
Tableau 6-1 Sous-programmes d'ensemble DBMS_PIPE
| Sous-programme | Description |
|---|---|
|
Crée un tuyau (nécessaire pour les tuyaux privés) |
|
|
Retourne le type de données de l'élément suivant dans la mémoire tampon |
|
|
Crée le message dans la mémoire tampon locale |
|
|
Épure le contenu du tuyau nommé |
|
|
Copie le message du tuyau nommé dans la mémoire tampon locale |
|
|
Épure le contenu de la mémoire tampon locale |
|
|
Supprime le tuyau nommé |
|
|
Envoie un message sur une pipe nommée : Cela crée implicitement une pipe publique si la pipe nommée n'existe pas. |
|
|
Retourne un nom de session unique |
|
|
Permet d'accéder à l'élément suivant dans la mémoire tampon |
- Fonction CREATE_PIPE
Cette fonction crée explicitement un canal public ou privé. Si l'indicateurprivateestTRUE, le créateur de la canalisation est affecté en tant que responsable de la canalisation privée. - Fonction RECEIVE_MESSAGE
Cette fonction copie le message dans la mémoire tampon du message local. - Fonction SEND_MESSAGE
Cette fonction envoie un message sur la barre verticale nommée.
Rubrique parent : Ensemble 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 la canalisation est affecté en tant que responsable de la canalisation privée.
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 tuyau Singleton, réglez le paramètre singleton à TRUE. Les arguments suivants s'appliquent à Singleton Pipes :
-
singleton: Indique que la barre verticale doit être créée en tant que barre verticale Singleton (valeur par défaut :FALSE). -
shelflife: Facultativement, spécifiez l'expiration de la durée de conservation (en secondes) du message mis en cache dans le tuyau Singleton. Il peut être utilisé pour l'invalidation implicite du message dans Singleton Pipe.Le message
shelflifedans le canal Singleton peut également être spécifié lorsque vous envoyez un message (voir 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 canal que vous créez. Vous devez utiliser ce nom lorsque vous appelez Attention : N'utilisez pas de noms de canal commençant par |
|
|
Taille maximale autorisée pour le tuyau, en octets. La taille totale de tous les messages de la barre verticale ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut de Le La valeur par défaut |
|
|
Utilise la valeur par défaut, Les canaux publics peuvent être créés implicitement lorsque vous appelez |
|
|
Utilisez Valeur par défaut : |
|
|
Délai d'expiration en secondes d'un message mis en cache dans Singleton Pipe. Une fois le temps La valeur par défaut est |
Valeurs retournées
Tableau 6-3 : Valeurs de retour de fonction CREATE_PIPE
| Retour | Description |
|---|---|
|
|
réussi. Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle retourne 0, indiquant la réussite, et toutes les données déjà présentes dans le canal restent. |
|
|
Échec de la conversion de la canalisation existante en canalisation singleton.
|
|
|
Une valeur différente de zéro est indiquée pour le paramètre |
|
|
Échec dû à un conflit d'attribution de nom. 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 une durée de conservation 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 : Sommaire des sous-programmes DBMS_PIPE pour les canalisations Singleton
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 de la barre verticale sur laquelle vous souhaitez recevoir un message. Les noms commençant par |
|
|
Temps d'attente d'un message, en secondes. Une temporisation de 0 vous permet de lire sans blocage. La temporisation n'inclut pas le temps passé dans la fonction de mémoire cache d'exécution spécifiée dans le paramètre Valeur par défaut : est la constante |
|
|
Mettre en cache le nom de la fonction pour mettre automatiquement en cache un message dans un canal Singleton. Le nom de la fonction doit être entièrement qualifié avec le schéma propriétaire :
Valeur par défaut : |
Valeurs retournées
Tableau 6-6 : Valeurs de retour de fonction RECEIVE_MESSAGE
| Retour | Description |
|---|---|
|
|
Succès |
|
|
Temporisé. Si le tuyau a été créé implicitement et est vide, il est supprimé. |
|
|
L'enregistrement dans le tuyau est trop volumineux pour le tampon. |
|
|
Une interruption s'est produite. |
8 |
La fonction Cache ne peut être spécifiée que lorsque vous utilisez un tuyau Singleton. |
|
|
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 supprimé du tuyau. Par conséquent, un message ne peut être reçu qu'une seule fois. Pour les tuyaux créés implicitement, le tuyau est retiré après la suppression du dernier enregistrement du tuyau.
Si le canal que vous spécifiez 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 intervalle de temporisation désigné, l'appel retourne et le tuyau est supprimé.
Après avoir reçu le message, vous devez effectuer 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éballer les éléments de type DATE, NUMBER, VARCHAR2 et il existe deux procédures supplémentaires pour déballer les éléments RAW et ROWID. Si vous ne connaissez pas le type de données que vous tentez de déballer, appelez NEXT_ITEM_TYPE pour déterminer le type de l'élément suivant dans la mémoire tampon.
Paramètre de fonction de mémoire cache
Singleton Pipes prend en charge la fonction cache pour mettre automatiquement en cache un message dans le tuyau dans les deux cas suivants :
- Singleton Pipe est vide.
- Le message dans la barre verticale Singleton n'est pas valide en raison du temps écoulé pour
shelflife.
Le nom de la fonction doit être entièrement qualifié avec le schéma propriétaire :
OWNER.FUNCTION_NAMEOWNER.PACKAGE.FUNCTION_NAME
Pour utiliser une fonction de cache, l'utilisateur de session courant qui appelle DBMS_PIPE.RECEIVE_MESSAGE doit disposer des privilèges requis pour exécuter la fonction de cache.
Syntaxe de la fonction de mémoire cache
CREATE OR REPLACE FUNCTION cache_function_name (
pipename IN VARCHAR2
) RETURN INTEGER;
| Paramètre | Type de données | Description |
|---|---|---|
|
|
VARCHAR2 |
Nom du tuyau Singleton. |
| Retour | Description |
|---|---|
| 0 | Succès |
| Non nul | Valeur d'échec retourné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 typiques d'une fonction de cache sont les suivantes :
- Créez un tuyau Singleton, pour un tuyau explicite, à l'aide de
DBMS_PIPE.CREATE_PIPE. - Créez le message à mettre en cache dans le canal Singleton.
- Envoyer un message à Singleton Pipe, en spécifiant éventuellement
shelflifepour le message implicite.
Exceptions
Tableau 6-7 : Exceptions de fonction RECEIVE_MESSAGE
| Exception | Description |
|---|---|
|
|
Erreur d'autorisation. Privilège insuffisant pour supprimer l'enregistrement de la barre verticale. La pipe 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 : Sommaire des sous-programmes DBMS_PIPE pour les canalisations Singleton
Fonction SEND_MESSAGE
Cette fonction envoie un message sur la canalisation nommée.
Le message est contenu dans la mémoire tampon du message local, qui a été remplie 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 Singleton implicite, réglez le paramètre singleton à TRUE. Les arguments suivants s'appliquent à Singleton Pipes :
singleton: Indique que la barre verticale doit être créée en tant que barre verticale Singleton (valeur par défaut :FALSE).shelflife: Facultativement, spécifiez l'expiration de la durée de conservation du message mis en cache dans le tuyau Singleton. Il peut être utilisé pour l'invalidation implicite du message dans Singleton Pipe.Cet argument s'applique aux tuyaux Singleton implicites et explicites. Une valeur
shelflifespécifiée dans la fonction SEND_MESSAGE remplace la valeurshelflifespécifiée pour le canal Singleton explicite dans la fonction CREATE_PIPE et sera la valeur par défaut pour tous les nouveaux messages mis en cache dans le canal Singleton.
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 de la barre verticale sur laquelle vous voulez placer le message. Si vous utilisez une barre verticale explicite, il s'agit du nom que vous avez spécifié lorsque vous avez appelé Attention : N'utilisez pas de noms de barre verticale commençant par ' |
|
|
Temps d'attente en tentant de placer un message sur une barre verticale, en secondes. La valeur par défaut est la constante |
|
|
Taille maximale autorisée pour le tuyau, en octets. La taille totale de tous les messages de la barre verticale ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut est de 655336 octets. Le La spécification de La valeur par défaut |
|
|
Utilisez Valeur par défaut : |
|
|
Délai d'expiration en secondes d'un message mis en cache dans Singleton Pipe. Une fois le temps La valeur par défaut est |
Valeurs retournées
Tableau 6-9 : Valeurs de retour de 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 retourne 0, indiquant la réussite, et toutes les données déjà présentes dans le canal restent. Si un utilisateur connecté en tant que |
|
|
Temporisé. 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é créé implicitement et est vide, il est supprimé. |
|
|
Une interruption s'est produite. Si le tuyau a été créé implicitement et est vide, il est supprimé. |
|
|
Échec de la conversion de la canalisation existante en canalisation 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 canal. Le tuyau est privé et appartient à quelqu'un d'autre. |
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour les canalisations Singleton
Aperçu DBMS_PIPE pour les pipelines de messagerie persistants
La fonctionnalité de canal comporte plusieurs applications potentielles : interface de service externe, débogage, transactions indépendantes et alertes.
Dans Autonomous AI Database, l'ensemble DBMS_PIPE offre des fonctionnalités étendues pour prendre en charge les canaux de messagerie persistants.
Messages persistants dans DBMS_PIPE :
-
Prise en charge de 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.
-
Prenez en charge le partage de messages au sein d'une seule base de données, entre plusieurs bases de données et entre des bases de données de différentes régions.
-
Prendre en charge plusieurs canaux à l'aide du même URI d'emplacement du magasin d'objets en nuage.
La fonctionnalité de messagerie persistante permet à deux sessions de base de données ou plus de communiquer avec les messages stockés dans le magasin d'objets en nuage. À l'aide de cette fonctionnalité, les messages d'un canal peuvent être mis à la disposition uniquement de la base de données courante ou être mis à la disposition 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_PIPEpris en charge :- Canal implicite : Créé automatiquement lorsqu'un message est envoyé avec un nom de canal inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE. - Canal explicite : Créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPEavec un nom de canal spécifié par l'utilisateur. - Public Pipe : Accessible par tout utilisateur disposant de l'autorisation
EXECUTEsur l'ensembleDBMS_PIPE. - Canal privé : Accessible par des sessions avec le même utilisateur que le créateur du canal.
- Canal implicite : Créé automatiquement lorsqu'un message est envoyé avec un nom de canal inconnu à l'aide de la fonction
Lors de l'envoi et de la réception de 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 autorisations d'accès voulues, publiques ou privées (en réglant le paramètre PRIVATE à FALSE ou en utilisant la valeur par défaut TRUE).
Limitation de DBMS_PIPE
L'ensemble DBMS_PIPE ne prend pas en charge l'envoi de messages entre des bases de données qui utilisent des jeux de caractères différents. Par exemple, si vous avez une instance de base de données d'intelligence artificielle autonome qui utilise AL32UTF8 et une autre 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érera 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, voir Sélectionner un jeu de caractères pour une base de données d'IA autonome.
Rubrique parent : Ensemble DBMS_PIPE
Sommaire 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 d'ensemble DBMS_PIPE
| Sous-programme | Description |
|---|---|
|
Crée un tuyau (nécessaire pour les tuyaux privés). |
|
|
Retourne la valeur de variable |
|
|
Retourne la valeur de la variable |
|
|
Retourne le type de données de l'élément suivant dans la mémoire tampon. |
|
|
Crée le message dans la mémoire tampon locale. |
|
|
Copie le message du canal nommé dans la mémoire tampon locale. |
|
|
Épure le contenu de la mémoire tampon locale. |
|
|
Supprime le tuyau nommé. |
|
|
Envoie un message sur un tuyau nommé : Cela crée implicitement un tuyau public si le tuyau nommé n'existe pas. |
|
|
Définit la variable |
|
|
Définit la variable |
|
|
Retourne un nom de session unique. |
|
|
Permet d'accéder à l'élément suivant dans la mémoire tampon. |
- Fonction CREATE_PIPE
Cette fonction crée explicitement un canal public ou privé. Si l'indicateurprivateestTRUE, le créateur de la canalisation est affecté en tant que responsable de la canalisation privée. - Fonction GET_CREDENTIAL_NAME
Cette fonction retourne la valeur de variablecredential_nameglobale à utiliser lorsque les messages sont stockés dans le magasin d'objets en nuage. - Fonction GET_LOCATION_URI
Cette fonction retourne la valeur de variablelocation_uriglobale qui peut être utilisée comme URI d'emplacement par défaut lorsque des messages de canal sont stockés dans le magasin d'objets en nuage. - Fonction RECEIVE_MESSAGE
Cette fonction copie le message dans la mémoire tampon du message local. - Fonction SEND_MESSAGE
Cette fonction envoie un message sur la barre verticale nommée. - Procédure SET_CREDENTIAL_NAME
Cette procédure définit la variablecredential_namequi est utilisée comme données d'identification par défaut lorsque des messages canalisés sont stockés dans le magasin d'objets en nuage. - Procédure SET_LOCATION_URI
Cette procédure définit la variablelocation_uriglobale.
Rubrique parent : Ensemble 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 la canalisation est affecté en tant que responsable de la canalisation privée.
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 canal que vous créez. Vous devez utiliser ce nom lorsque vous appelez Attention : N'utilisez pas de noms de canal commençant par |
|
|
Taille maximale autorisée pour le tuyau, en octets. La taille totale de tous les messages de la barre verticale ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut de Le La valeur par défaut |
|
|
Utilise la valeur par défaut, Les canaux publics peuvent être créés implicitement lorsque vous appelez |
Valeurs retournées
Tableau 6-13 : Valeurs de retour de fonction CREATE_PIPE
| Retour | Description |
|---|---|
|
|
réussi. Si le canal existe déjà et que l'utilisateur qui tente de le créer est autorisé à l'utiliser, Oracle retourne 0, indiquant la réussite, et toutes les données déjà présentes dans le canal restent. |
|
|
Échec dû à un conflit d'attribution de nom. 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 un privé explicite nommé MY_PIPE1
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(
pipename => 'MY_PIPE1',
private => TRUE);
END;
/
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
Fonction GET_CREDENTIAL_NAME
Cette fonction retourne la valeur de variable credential_name globale à utiliser lorsque les messages sont stockés dans le magasin d'objets en nuage.
Syntaxe
DBMS_PIPE.GET_CREDENTIAL_NAME
RETURN VARCHAR2;Valeurs retournées
| Valeur retournée | Description |
|---|---|
|
|
Nom des données d'identification permettant d'accéder au service de stockage d'objets en nuage. |
Exemple
DECLARE
credential_name VARCHAR2(400)
BEGIN
credential_name := DBMS_PIPE.GET_CREDENTIAL_NAME;
END;
/
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
Fonction GET_LOCATION_URI
Cette fonction retourne la valeur de variable location_uri globale qui peut être utilisée comme URI d'emplacement par défaut lorsque des messages de canal sont stockés dans le magasin d'objets en nuage.
Syntaxe
DBMS_PIPE.GET_LOCATION_URI
RETURN VARCHAR2;Valeur retournée
| Valeur retournée | Description |
|---|---|
location_uri |
URI de l'objet. |
Exemple
DECLARE
location_uri VARCHAR2(400)
BEGIN
location_uri := DBMS_PIPE.GET_LOCATION_URI;
END;
/
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
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 de la barre verticale sur laquelle vous souhaitez recevoir un message. Les noms commençant par |
|
|
Temps d'attente d'un message, en secondes. Une temporisation de 0 vous permet de lire sans blocage. La temporisation n'inclut pas le temps passé à exécuter la fonction de mémoire cache spécifiée avec le paramètre Valeur par défaut : est la constante |
|
|
Nom des données d'identification du magasin en nuage utilisé pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler L'objet de données d'identification doit disposer des privilèges La valeur |
|
|
URI d'emplacement du magasin en nuage utilisé pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler |
Valeurs retournées
Tableau 6-16 : Valeurs de retour de fonction RECEIVE_MESSAGE
| Retour | Description |
|---|---|
|
|
Succès |
|
|
Temporisé. Si le tuyau a été créé implicitement et est vide, il est supprimé. |
|
|
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 supprimé du tuyau. Par conséquent, un message ne peut être reçu qu'une seule fois. Pour les tuyaux créés implicitement, le tuyau est retiré après la suppression du dernier enregistrement du tuyau. -
Si le canal que vous spécifiez lorsque vous appelez
RECEIVE_MESSAGEn'existe pas déjà, Oracle crée implicitement le canal et attend de recevoir le message. Si le message n'arrive pas dans un intervalle de temporisation désigné, l'appel retourne et le tuyau est supprimé. -
Après avoir reçu le message, vous devez effectuer un ou plusieurs appels à
UNPACK_MESSAGEpour accéder aux éléments individuels du message. La procédureUNPACK_MESSAGEest surchargée pour déballer les éléments de typeDATE,NUMBER,VARCHAR2et il existe deux procédures supplémentaires pour déballer les élémentsRAWetROWID. Si vous ne connaissez pas le type de données que vous tentez de déballer, appelezNEXT_ITEM_TYPEpour déterminer le type de l'élément suivant dans la mémoire tampon. -
Les messages persistants sont garantis d'être écrits ou lus par un seul processus. Cela évite les incohérences dans le contenu des messages en raison d'écritures et de lectures simultanées. À l'aide d'un canal de messagerie persistant,
DBMS_PIPEautorise une seule opération, l'envoi d'un message ou d'un message de réception à être actif à 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 périodiquement jusqu'à ce que la valeurtimeoutsoit atteinte. -
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs d'Oracle Cloud Infrastructure ou des URI Swift. Toutefois, l'URI d'emplacement et les données 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 native des clés de signature Oracle Cloud Infrastructure dans l'objet de données 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 de données d'identification.
-
Exceptions
Tableau 6-17 : Exceptions de fonction RECEIVE_MESSAGE
| Exception | Description |
|---|---|
|
|
Erreur d'autorisation. Privilège insuffisant pour supprimer l'enregistrement de la barre verticale. La pipe appartient à quelqu'un d'autre. |
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
Fonction SEND_MESSAGE
Cette fonction envoie un message sur la canalisation nommée.
Le message est contenu dans la mémoire tampon du message local, qui a été remplie 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 données d'identification du magasin en nuage utilisé pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler L'objet de données d'identification doit disposer des privilèges La valeur |
location_uri |
URI d'emplacement du magasin en nuage utilisé pour stocker les messages.
Vous pouvez définir cette valeur avant d'appeler |
|
|
Taille maximale autorisée pour le tuyau, en octets. La taille totale de tous les messages de la barre verticale ne peut pas dépasser ce montant. Le message est bloqué s'il dépasse ce maximum. La valeur par défaut est de 655336 octets. Le La spécification de La valeur par défaut |
|
|
Nom de la barre verticale sur laquelle vous voulez placer le message. Si vous utilisez une barre verticale explicite, il s'agit du nom que vous avez spécifié lorsque vous avez appelé Attention : N'utilisez pas de noms de barre verticale commençant par ' |
|
|
Temps d'attente en tentant de placer un message sur une barre verticale, en secondes. La valeur par défaut est la constante |
Valeurs retournées
Tableau 6-19 : Valeurs de retour de 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 retourne 0, indiquant la réussite, et toutes les données déjà présentes dans le canal restent. Si un utilisateur connecté en tant que |
|
|
Temporisé. 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é créé implicitement et est vide, il est supprimé. |
|
|
Une interruption s'est produite. Si le tuyau a été créé implicitement et est vide, il est supprimé. |
|
|
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
-
Les messages persistants sont garantis d'être écrits ou lus par un seul processus. Cela évite les incohérences dans le contenu des messages en raison d'écritures et de lectures simultanées. À l'aide d'un canal de messagerie persistant,
DBMS_PIPEautorise une seule opération, l'envoi d'un message ou d'un message de réception à être actif à 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 périodiquement jusqu'à ce que la valeurtimeoutsoit atteinte. -
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs d'Oracle Cloud Infrastructure ou des URI Swift. Toutefois, l'URI d'emplacement et les données 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 native des clés de signature Oracle Cloud Infrastructure dans l'objet de données 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 de données d'identification.
-
Exceptions
Tableau 6-20 : Exception de fonction SEND_MESSAGE
| Exception | Description |
|---|---|
|
|
Erreur d'autorisation. Privilège insuffisant pour écrire dans le canal. Le tuyau est privé et appartient à quelqu'un d'autre. |
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
SET_CREDENTIAL_NAME Procédure
Cette procédure définit la variable credential_name qui est utilisée comme données d'identification par défaut lorsque des messages de canal sont stockés dans le magasin d'objets en nuage.
Syntaxe
DBMS_PIPE.SET_CREDENTIAL_NAME ( credential_name IN VARCHAR2 );
Paramètres
| Paramètre | Description |
|---|---|
|
|
Nom des données d'identification permettant d'accéder au service de stockage d'objets en nuage. La valeur |
Note d'utilisation
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs d'Oracle Cloud Infrastructure ou des URI Swift. Toutefois, l'URI d'emplacement et les données 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 native des clés de signature Oracle Cloud Infrastructure dans l'objet de données 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 de données d'identification.
Exemple
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME(
credential_name => 'my_cred1');
END;
/
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante
SET_LOCATION_URI Procédure
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 d'objet ou de fichier. Le format de l'URI dépend du service de stockage d'objets en nuage que vous utilisez. Pour des détails, voir Formats d'URI DBMS_CLOUD. |
Note d'utilisation
Si vous utilisez Oracle Cloud Infrastructure Object Storage pour stocker des messages, vous pouvez utiliser des URI natifs d'Oracle Cloud Infrastructure ou des URI Swift. Toutefois, l'URI d'emplacement et les données 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 native des clés de signature Oracle Cloud Infrastructure dans l'objet de données 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 de données d'identification.
Exemple
BEGIN
DBMS_PIPE.GET_LOCATION_URI(
location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/
Rubrique parent : Sommaire des sous-programmes DBMS_PIPE pour la messagerie persistante