Paquete DBMS_PIPE
DBMS_PIPE
permite la comunicación de dos o más sesiones en la misma instancia.
Oracle Autonomous Database soporta la funcionalidad principal DBMS_PIPE
como está disponible en Oracle Database 19c, además de extensiones.
Consulte DBMS_PIPE para obtener más información sobre la funcionalidad principal DBMS_PIPE
proporcionada en Oracle Database.
- DBMS_PIPE Visión general de Singleton Pipes
La funcionalidad de Pipe tiene varias aplicaciones posibles: interfaz de servicio externo, depuración, transacciones independientes y alertas. - Resumen de los subprogramas DBMS_PIPE para pipas singleton
En esta tabla se muestran los subprogramasDBMS_PIPE
y se describen brevemente. - DBMS_PIPE Visión general de pipas de mensajes persistentes
La funcionalidad de pipa tiene varias aplicaciones potenciales: interfaz de servicio externa, depuración, transacciones independientes y alertas. - Resumen de los subprogramas DBMS_PIPE para la mensajería persistente
En esta tabla se muestran los subprogramasDBMS_PIPE
y se describen brevemente.
Tema principal: Referencia de paquete proporcionado por Autonomous Database
DBMS_PIPE Visión general de Singleton Pipes
La funcionalidad Pipe tiene varias aplicaciones potenciales: interfaz de servicio externo, depuración, transacciones independientes y alertas.
En Autonomous Database, el paquete DBMS_PIPE tiene una funcionalidad ampliada para soportar pipas singleton.
Las funciones de canalización singleton en DBMS_PIPE
proporcionan lo siguiente:
-
Capacidad de almacenar en caché y recuperar un mensaje personalizado, de hasta 32.767 bytes, en la memoria de la base de datos Oracle. El tamaño máximo de mensaje de 32.767 bytes es aplicable a todos los pipes, incluidos los pipes singleton. Las versiones anteriores de
DBMS_PIPE
tenían un tamaño de mensaje máximo más pequeño. -
Comparta el mensaje almacenado en caché en varias sesiones de base de datos con lecturas simultáneas.
-
Métodos de invalidación la caché:
- Invalidación explícita de caché controlada por el usuario.
- Invalidación de caché después de un intervalo de tiempo de parámetro especificado por el usuario (
shelflife
) (en segundos).
-
API PL/SQL declarativas y fáciles de utilizar para el almacenamiento en caché.
-
Soporta tanto bases de datos de sólo lectura como de lectura-escritura.
Un tubo Singleton puede ser cualquiera de los tipos DBMS_PIPE
admitidos:
- Conducto implícito: se crea automáticamente cuando se envía un mensaje con un nombre de conducto desconocido mediante la función
DBMS_PIPE.SEND_MESSAGE
. - Conducto explícito: se crea mediante la función
DBMS_PIPE.CREATE_PIPE
con un nombre de conducto especificado por el usuario. - Conducto público: accesible para cualquier usuario con permiso
EXECUTE
en el paqueteDBMS_PIPE
- Conducto privado: accesible por sesiones con el mismo usuario que el creador del conducto.
Tema principal: Paquete DBMS_PIPE
Resumen de subprogramas DBMS_PIPE para pipas singleton
En esta tabla, se muestran los subprogramas DBMS_PIPE
y se describen brevemente.
Tabla 6-1 Subprogramas de paquete DBMS_PIPE
Subprograma | Descripción |
---|---|
Crea una tubería (necesaria para tuberías privadas) |
|
Devuelve el tipo de dato del siguiente elemento en el buffer |
|
Genera un mensaje en el buffer local |
|
Depura el contenido del conducto con nombre |
|
Copia el mensaje del conducto con nombre en el buffer local |
|
Depura el contenido del buffer local. |
|
Elimina la conducción con nombre |
|
Envía un mensaje en el conducto con nombre: crea implícitamente un conducto público si el conducto con nombre no existe |
|
Devuelve un nombre de sesión único |
|
Accede al siguiente elemento del buffer |
- Función CREATE_PIPE
Esta función crea explícitamente un canal público o privado. Si el indicadorprivate
esTRUE
, el creador del conducto se asigna como propietario del conducto privado. - Función RECEIVE_MESSAGE
Esta función copia el mensaje en el buffer de mensajes local. - Función SEND_MESSAGE
Esta función envía un mensaje en el conducto con nombre.
Tema principal: Paquete DBMS_PIPE
Función CREATE_PIPE
Esta función crea explícitamente un canal público o privado. Si el indicador private
es TRUE
, el creador del conducto se asigna como propietario del conducto privado.
Los pipes creados explícitamente solo se pueden eliminar llamando a REMOVE_PIPE
o cerrando la instancia.
Para crear una tubería singleton, defina el parámetro singleton
en TRUE
. Los siguientes argumentos son aplicables a Singleton Pipes:
-
singleton
: indica que el conducto se debe crear como un conducto singleton (valor por defecto:FALSE
). -
shelflife
: puede especificar una caducidad de vida útil (en segundos) del mensaje almacenado en caché en Singleton Pipe. Se puede utilizar para la invalidación implícita del mensaje en Singleton Pipe.El mensaje
shelflife
en Singleton Pipe también se puede especificar al enviar un mensaje (consulte SEND_MESSAGE Function).
Sintaxis
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;
Parámetros
Tabla 6-2 Parámetros de función CREATE_PIPE
parámetro | Descripción |
---|---|
|
Nombre del conducto que está creando. Debe utilizar este nombre al llamar a Precaución: No utilice nombres de conducto que empiecen por |
|
Tamaño máximo permitido para el conducto, en bytes. El tamaño total de todos los mensajes del canal no puede superar esta cantidad. El mensaje se bloquea si supera este máximo. El valor por defecto El El valor por defecto |
|
Utiliza el valor por defecto, Los pipes públicos se pueden crear implícitamente al llamar a |
|
Utilice Valor por defecto: |
|
Tiempo de caducidad en segundos de un mensaje almacenado en caché en Singleton Pipe. Una vez que se ha excedido el tiempo El valor por defecto es |
Valores de Retorno
Tabla 6-3 Valores de retorno de función CREATE_PIPE
Volver | Descripción |
---|---|
|
correcto. Si el conducto ya existe y el usuario que intenta crearlo está autorizado a utilizarlo, Oracle devuelve 0, indicando que es correcto, y los datos que ya están en el conducto permanecen. |
|
Fallo al convertir el canal existente en el único.
|
|
Se proporciona un valor distinto de cero para el parámetro |
|
Fallo debido a un conflicto de nomenclatura. Si existe un conducto con el mismo nombre y lo ha creado otro usuario, Oracle indica el error |
Excepciones
Tabla 6-4 Excepción de función CREATE_PIPE
Excepción | Descripción |
---|---|
|
Error de permiso: ya existe un conducto con el mismo nombre y no se le permite utilizarlo. |
Ejemplo
Cree una tubería Singleton con una vida útil de 1 hora.
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(pipename => 'MY_PIPE1',
private => TRUE,
singleton => TRUE,
shelflife => 3600);
END;
/
Tema principal: Resumen de los subprogramas DBMS_PIPE para pipas singleton
Función RECEIVE_MESSAGE
Esta función copia el mensaje en el buffer de mensajes local.
Sintaxis
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, cache_func IN VARCHAR2 DEFAULT NULL) RETURN INTEGER;
Parámetros
Tabla 6-5 Parámetros de función RECEIVE_MESSAGE
parámetro | Descripción |
---|---|
|
Nombre del conducto en el que desea recibir un mensaje. Los nombres que empiezan por |
|
Tiempo de espera para un mensaje, en segundos. Un timeout de 0 le permite leer sin bloqueo. El timeout no incluye el tiempo empleado en la función de caché de ejecución especificada en el parámetro Valor por defecto: es la constante |
|
Nombre de función de caché para almacenar automáticamente en caché un mensaje en un canal Singleton. El nombre de la función debe estar totalmente cualificado con el esquema de propietario:
Valor por defecto: |
Valores de Retorno
Tabla 6-6 Valores de retorno de función RECEIVE_MESSAGE
Volver | Descripción |
---|---|
|
Correcta |
|
Timeout. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
El registro en el conducto es demasiado grande para el buffer. |
|
Se ha producido una interrupción. |
8 |
La función de caché solo se puede especificar cuando se utiliza un tubo singleton. |
|
El usuario no tiene suficientes privilegios para leer desde el conducto. |
Notas de Uso
Para recibir un mensaje de un conducto, primero llame a RECEIVE_MESSAGE
. Cuando recibe un mensaje, se elimina de la tubería; por lo tanto, un mensaje solo se puede recibir una vez. Para las tuberías creadas implícitamente, la tubería se elimina después de eliminar el último registro de la tubería.
Si el conducto que especifica al llamar a RECEIVE_MESSAGE
aún no existe, Oracle crea el conducto de forma implícita y espera a recibir el mensaje. Si el mensaje no llega dentro de un intervalo de tiempo de espera designado, la llamada vuelve y se elimina el canal.
Después de recibir el mensaje, debe realizar una o más llamadas a UNPACK_MESSAGE
para acceder a los elementos individuales del mensaje. El procedimiento UNPACK_MESSAGE
se sobrecarga para desempaquetar elementos de tipo DATE
, NUMBER
, VARCHAR2
, y hay dos procedimientos adicionales para desempaquetar elementos RAW
y ROWID
. Si no conoce el tipo de datos que está intentando desempaquetar, llame a NEXT_ITEM_TYPE
para determinar el tipo del siguiente elemento en el buffer.
Parámetro de Función de Caché
Los pipes singleton admiten la función de caché para almacenar automáticamente en caché un mensaje en el canal en caso de los dos escenarios siguientes:
- Singleton Pipe está vacío.
- El mensaje en Singleton Pipe no es válido debido al tiempo transcurrido de
shelflife
.
El nombre de la función debe estar totalmente cualificado con el esquema de propietario:
OWNER.FUNCTION_NAME
OWNER.PACKAGE.FUNCTION_NAME
Para utilizar una función de caché, el usuario de sesión actual que llama a DBMS_PIPE.RECEIVE_MESSAGE
debe tener los privilegios necesarios para ejecutar la función de caché.
Sintaxis de Función de Caché
CREATE OR REPLACE FUNCTION cache_function_name (
pipename IN VARCHAR2
) RETURN INTEGER;
parámetro | Tipo de Dato | Descripción |
---|---|---|
|
VARCHAR2 |
Nombre del Singleton Pipe. |
Volver | Descripción |
---|---|
0 | Correcta |
No es cero | Valor de fallo devuelto de DBMS_PIPE.RECEIVE_MESSAGE |
Defina una función de caché para proporcionar encapsulación y abstracción de complejidad de las sesiones de lectura de Singleton Pipe. Las operaciones típicas dentro de una función de caché serían:
- Cree un conducto singleton, para un conducto explícito, mediante
DBMS_PIPE.CREATE_PIPE
. - Cree el mensaje que desea almacenar en caché en Singleton Pipe.
- Enviar mensaje al canal Singleton, especificando opcionalmente
shelflife
para el mensaje implícito.
Excepciones
Tabla 6-7 Excepciones de función RECEIVE_MESSAGE
Excepción | Descripción |
---|---|
|
Error de permiso. No dispone de privilegios suficientes para eliminar el registro del conducto. La tubería es propiedad de otra persona. |
Ejemplo
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.receive_message(pipename => 'MY_PIPE1',
timeout => 1,
cache_func => 'MY_USER.MY_CACHE_FUNC');
END;
/
Tema principal: Resumen de los subprogramas DBMS_PIPE para pipas singleton
Función SEND_MESSAGE
Esta función envía un mensaje en el conducto con nombre.
El mensaje está incluido en el buffer de mensajes local, que se ha rellenado con llamadas a PACK_MESSAGE
. Puede crear un conducto explícitamente mediante CREATE_PIPE
; de lo contrario, se crea de forma implícita.
Para crear un canal Singleton implícito, defina el parámetro singleton
en TRUE
. Los siguientes argumentos son aplicables a Singleton Pipes:
singleton
: indica que el conducto se debe crear como un conducto singleton (valor por defecto:FALSE
).shelflife
: puede especificar una caducidad de vida útil del mensaje almacenado en caché en Singleton Pipe. Se puede utilizar para la invalidación implícita del mensaje en Singleton Pipe.Este argumento es aplicable tanto a pipas Singleton implícitas como explícitas. Un valor
shelflife
especificado en la función SEND_MESSAGE sobrescribe el valorshelflife
especificado para el conducto Singleton explícito en la función CREATE_PIPE y será el valor predeterminado para los mensajes nuevos almacenados en caché en el conducto Singleton.
Sintaxis
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;
Parámetros
Tabla 6-8 Parámetros de función SEND_MESSAGE
parámetro | Descripción |
---|---|
|
Nombre del conducto en el que desea colocar el mensaje. Si utiliza un conducto explícito, este es el nombre que ha especificado al llamar a Precaución: No utilice nombres de conducción que empiecen por ' |
|
Tiempo de espera al intentar colocar un mensaje en un canal, en segundos. El valor por defecto es la constante |
|
Tamaño máximo permitido para el conducto, en bytes. El tamaño total de todos los mensajes del canal no puede superar esta cantidad. El mensaje se bloquea si supera este máximo. El valor por defecto es 65536 bytes. El La especificación de El valor por defecto |
|
Utilice Valor por defecto: |
|
Tiempo de caducidad en segundos de un mensaje almacenado en caché en Singleton Pipe. Una vez que se ha excedido el tiempo El valor por defecto es |
Valores de Retorno
Tabla 6-9 Valores de retorno de función SEND_MESSAGE
Volver | Descripción |
---|---|
|
Correcta. Si el conducto ya existe y el usuario que intenta crearlo está autorizado a utilizarlo, Oracle devuelve 0, indicando que es correcto, y los datos que ya están en el conducto permanecen. Si un usuario conectado como |
|
Timeout. Este procedimiento puede agotarse porque no puede obtener un bloqueo en el conducto o porque el conducto permanece demasiado lleno para ser utilizado. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
Se ha producido una interrupción. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
Fallo al convertir el canal existente en el único.
|
|
Se proporciona un valor distinto de cero para el parámetro |
|
Los privilegios no son suficientes. Si existe un conducto con el mismo nombre y lo ha creado otro usuario, Oracle indica el error |
Excepciones
Tabla 6-10 Excepción de función SEND_MESSAGE
Excepción | Descripción |
---|---|
|
Error de permiso. Privilegio insuficiente para escribir en el conducto. La tubería es privada y propiedad de otra persona. |
Tema principal: Resumen de los subprogramas DBMS_PIPE para pipas singleton
DBMS_PIPE Visión General de Pipes de Mensajes Persistentes
La funcionalidad Pipe tiene varias aplicaciones potenciales: interfaz de servicio externo, depuración, transacciones independientes y alertas.
En Autonomous Database, el paquete DBMS_PIPE tiene una funcionalidad ampliada para soportar pipas de mensajes persistentes.
Mensajes persistentes en DBMS_PIPE
:
-
Admite la capacidad de enviar y recuperar mensajes muy grandes.
-
Admite un gran número de mensajes de canal.
-
Permita el uso compartido de mensajes en una sola base de datos, en varias bases de datos y entre bases de datos de diferentes regiones.
-
Soporta varios pipes con el mismo URI de ubicación del almacén de objetos en la nube.
La funcionalidad de mensajería persistente permite que dos o más sesiones de base de datos se comuniquen con los mensajes almacenados en el almacén de objetos en la nube. Al utilizar esta funcionalidad, los mensajes de un canal pueden estar disponibles solo para la base de datos actual o para varias bases de datos de la misma región o de distintas regiones.
Un conducto de mensajería persistente puede ser cualquiera de los tipos
DBMS_PIPE
soportados:- Conducto implícito: se crea automáticamente cuando se envía un mensaje con un nombre de conducto desconocido mediante la función
DBMS_PIPE.SEND_MESSAGE
. - Conducto explícito: se crea mediante la función
DBMS_PIPE.CREATE_PIPE
con un nombre de conducto especificado por el usuario. - Conducto público: accesible para cualquier usuario con permiso
EXECUTE
en el paqueteDBMS_PIPE
. - Conducto privado: accesible por sesiones con el mismo usuario que el creador del conducto.
- Conducto implícito: se crea automáticamente cuando se envía un mensaje con un nombre de conducto desconocido mediante la función
Al enviar y recibir mensajes en diferentes bases de datos mediante mensajes persistentes, Oracle recomienda llamar a
DBMS_PIPE.CREATE_PIPE
antes de enviar o recibir mensajes. La creación de un canal explícito con DBMS_PIPE.CREATE_PIPE
garantiza que se cree un canal con los permisos de acceso que desee, ya sea público o privado (definiendo el parámetro PRIVATE
en FALSE
o utilizando el valor por defecto TRUE
).
Tema principal: Paquete DBMS_PIPE
Resumen de Subprogramas DBMS_PIPE para Mensajería Persistente
En esta tabla, se muestran los subprogramas DBMS_PIPE
y se describen brevemente.
Tabla 6-11 Subprogramas de paquete DBMS_PIPE
Subprograma | Descripción |
---|---|
Crea una tubería (necesaria para tuberías privadas). |
|
Devuelve el valor de la variable global |
|
Devuelve el valor de variable |
|
Devuelve el tipo de dato del siguiente elemento en el buffer. |
|
Genera un mensaje en el buffer local. |
|
Copia el mensaje del conducto con nombre en el buffer local. |
|
Depura el contenido del buffer local. |
|
Elimina la conducción con nombre. |
|
Envía un mensaje en un canal con nombre: crea implícitamente un canal público si el canal con nombre no existe. |
|
Define la variable |
|
Define la variable |
|
Devuelve un nombre de sesión único. |
|
Accede al siguiente elemento del buffer. |
- Función CREATE_PIPE
Esta función crea explícitamente un canal público o privado. Si el indicadorprivate
esTRUE
, el creador del conducto se asigna como propietario del conducto privado. - Función GET_CREDENTIAL_NAME
Esta función devuelve el valor de variablecredential_name
global para su uso cuando los mensajes se almacenan en el almacén de objetos en la nube. - Función GET_LOCATION_URI
Esta función devuelve el valor de variablelocation_uri
global que se puede utilizar como URI de ubicación por defecto cuando los mensajes de conducción se almacenan en el almacén de objetos en la nube. - Función RECEIVE_MESSAGE
Esta función copia el mensaje en el buffer de mensajes local. - Función SEND_MESSAGE
Esta función envía un mensaje en el conducto con nombre. - Procedimiento SET_CREDENTIAL_NAME
Este procedimiento define la variablecredential_name
que se utiliza como credencial por defecto cuando los mensajes de conducción se almacenan en el almacén de objetos en la nube. - Procedimiento SET_LOCATION_URI
Este procedimiento define la variablelocation_uri
global.
Tema principal: Paquete DBMS_PIPE
Función CREATE_PIPE
Esta función crea explícitamente un canal público o privado. Si el indicador private
es TRUE
, el creador del conducto se asigna como propietario del conducto privado.
Los pipes creados explícitamente solo se pueden eliminar llamando a REMOVE_PIPE
o cerrando la instancia.
Sintaxis
DBMS_PIPE.CREATE_PIPE ( pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 66536, private IN BOOLEAN DEFAULT TRUE) RETURN INTEGER;
Parámetros
Tabla 6-12 Parámetros de función CREATE_PIPE
parámetro | Descripción |
---|---|
|
Nombre del conducto que está creando. Debe utilizar este nombre al llamar a Precaución: No utilice nombres de conducto que empiecen por |
|
Tamaño máximo permitido para el conducto, en bytes. El tamaño total de todos los mensajes del canal no puede superar esta cantidad. El mensaje se bloquea si supera este máximo. El valor por defecto El El valor por defecto |
|
Utiliza el valor por defecto, Los pipes públicos se pueden crear implícitamente al llamar a |
Valores de Retorno
Tabla 6-13 Valores de retorno de función CREATE_PIPE
Volver | Descripción |
---|---|
|
correcto. Si el conducto ya existe y el usuario que intenta crearlo está autorizado a utilizarlo, Oracle devuelve 0, indicando que es correcto, y los datos que ya están en el conducto permanecen. |
|
Fallo debido a un conflicto de nomenclatura. Si existe un conducto con el mismo nombre y lo ha creado otro usuario, Oracle indica el error |
Excepciones
Tabla 6-14 Excepción de función CREATE_PIPE
Excepción | Descripción |
---|---|
|
Error de permiso: ya existe un conducto con el mismo nombre y no se le permite utilizarlo. |
Ejemplo
Crear un privado explícito denominado MY_PIPE1
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(
pipename => 'MY_PIPE1',
private => TRUE);
END;
/
Función GET_CREDENTIAL_NAME
Esta función devuelve el valor de variable credential_name
global para su uso cuando los mensajes se almacenan en el almacén de objetos en la nube.
Sintaxis
DBMS_PIPE.GET_CREDENTIAL_NAME RETURN VARCHAR2;
Valores de Retorno
Valor devuelto | Descripción |
---|---|
|
Nombre de la credencial para acceder a Cloud Object Storage. |
Ejemplo
DECLARE
credential_name VARCHAR2(400)
BEGIN
credential_name := DBMS_PIPE.GET_CREDENTIAL_NAME;
END;
/
Función GET_LOCATION_URI
Esta función devuelve el valor de variable location_uri
global que se puede utilizar como URI de ubicación por defecto cuando los mensajes de conducción se almacenan en el almacén de objetos en la nube.
Sintaxis
DBMS_PIPE.GET_LOCATION_URI RETURN VARCHAR2;
Valor devuelto
Valor devuelto | Descripción |
---|---|
location_uri |
URI de Objeto. |
Ejemplo
DECLARE
location_uri VARCHAR2(400)
BEGIN
location_uri := DBMS_PIPE.GET_LOCATION_URI;
END;
/
Función RECEIVE_MESSAGE
Esta función copia el mensaje en el buffer de mensajes local.
Sintaxis
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2) RETURN INTEGER;
Parámetros
Tabla 6-15 Parámetros de función RECEIVE_MESSAGE
parámetro | Descripción |
---|---|
|
Nombre del conducto en el que desea recibir un mensaje. Los nombres que empiezan por |
|
Tiempo de espera para un mensaje, en segundos. Un timeout de 0 le permite leer sin bloqueo. El timeout no incluye el tiempo dedicado a ejecutar la función de caché especificada con el parámetro Valor por defecto: es la constante |
|
Nombre de credencial del almacén en la nube utilizado para almacenar mensajes.
Puede definir este valor antes de llamar a El objeto de credencial debe tener privilegios El valor |
|
URI de ubicación del almacén en la nube utilizado para almacenar mensajes.
Puede definir este valor antes de llamar a |
Valores de Retorno
Tabla 6-16 Valores de retorno de función RECEIVE_MESSAGE
Volver | Descripción |
---|---|
|
Correcta |
|
Timeout. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
El registro en el conducto es demasiado grande para el buffer. |
|
Se ha producido una interrupción. |
|
El usuario no tiene suficientes privilegios para leer desde el conducto. |
Notas de Uso
-
Para recibir un mensaje de un conducto, primero llame a
RECEIVE_MESSAGE
. Cuando recibe un mensaje, se elimina de la tubería; por lo tanto, un mensaje solo se puede recibir una vez. Para las tuberías creadas implícitamente, la tubería se elimina después de eliminar el último registro de la tubería. -
Si el conducto que especifica al llamar a
RECEIVE_MESSAGE
aún no existe, Oracle crea el conducto de forma implícita y espera a recibir el mensaje. Si el mensaje no llega dentro de un intervalo de tiempo de espera designado, la llamada vuelve y se elimina el canal. -
Después de recibir el mensaje, debe realizar una o más llamadas a
UNPACK_MESSAGE
para acceder a los elementos individuales del mensaje. El procedimientoUNPACK_MESSAGE
se sobrecarga para desempaquetar elementos de tipoDATE
,NUMBER
,VARCHAR2
, y hay dos procedimientos adicionales para desempaquetar elementosRAW
yROWID
. Si no conoce el tipo de datos que está intentando desempaquetar, llame aNEXT_ITEM_TYPE
para determinar el tipo del siguiente elemento en el buffer. -
Se garantiza que los mensajes persistentes se escriban o lean exactamente en un proceso. Esto evita la inconsistencia del contenido del mensaje debido a escrituras y lecturas simultáneas. Mediante un canal de mensajes persistente,
DBMS_PIPE
permite que solo una operación, el envío de un mensaje o un mensaje de recepción, esté activo en un momento determinado. Sin embargo, si una operación no es posible debido a una operación en curso, el proceso vuelve a intentarlo periódicamente hasta que se alcanza el valortimeout
. -
Si utiliza Oracle Cloud Infrastructure Object Storage para almacenar mensajes, puede utilizar los URI nativos de Oracle Cloud Infrastructure o los URI de Swift. Sin embargo, el URI de ubicación y la credencial deben coincidir en el tipo de la siguiente manera:
-
Si utiliza un formato de URI nativo para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar la autenticación de claves de firma nativas de Oracle Cloud Infrastructure en el objeto de credencial.
-
Si utiliza el formato de URI de Swift para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar una autenticación de token de autenticación en el objeto de credencial.
-
Excepciones
Tabla 6-17 Excepciones de función RECEIVE_MESSAGE
Excepción | Descripción |
---|---|
|
Error de permiso. No dispone de privilegios suficientes para eliminar el registro del conducto. La tubería es propiedad de otra persona. |
Función SEND_MESSAGE
Esta función envía un mensaje en el conducto con nombre.
El mensaje está incluido en el buffer de mensajes local, que se ha rellenado con llamadas a PACK_MESSAGE
. Puede crear un conducto explícitamente mediante CREATE_PIPE
; de lo contrario, se crea de forma implícita.
Sintaxis
DBMS_PIPE.SEND_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2 ) RETURN INTEGER;
Parámetros
Tabla 6-18 Parámetros de función SEND_MESSAGE
parámetro | Descripción |
---|---|
credential_name |
Nombre de credencial del almacén en la nube utilizado para almacenar mensajes.
Puede definir este valor antes de llamar a El objeto de credencial debe tener privilegios El valor |
location_uri |
URI de ubicación del almacén en la nube utilizado para almacenar mensajes.
Puede definir este valor antes de llamar a |
|
Tamaño máximo permitido para el conducto, en bytes. El tamaño total de todos los mensajes del canal no puede superar esta cantidad. El mensaje se bloquea si supera este máximo. El valor por defecto es 65536 bytes. El La especificación de El valor por defecto |
|
Nombre del conducto en el que desea colocar el mensaje. Si utiliza un conducto explícito, este es el nombre que ha especificado al llamar a Precaución: No utilice nombres de conducción que empiecen por ' |
|
Tiempo de espera al intentar colocar un mensaje en un canal, en segundos. El valor por defecto es la constante |
Valores de Retorno
Tabla 6-19 Valores de retorno de función SEND_MESSAGE
Volver | Descripción |
---|---|
|
Correcta. Si el conducto ya existe y el usuario que intenta crearlo está autorizado a utilizarlo, Oracle devuelve 0, indicando que es correcto, y los datos que ya están en el conducto permanecen. Si un usuario conectado como |
|
Timeout. Este procedimiento puede agotarse porque no puede obtener un bloqueo en el conducto o porque el conducto permanece demasiado lleno para ser utilizado. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
Se ha producido una interrupción. Si el conducto se ha creado implícitamente y está vacío, se elimina. |
|
Los privilegios no son suficientes. Si existe un conducto con el mismo nombre y lo ha creado otro usuario, Oracle indica el error |
Notas de Uso
-
Se garantiza que los mensajes persistentes se escriban o lean exactamente en un proceso. Esto evita la inconsistencia del contenido del mensaje debido a escrituras y lecturas simultáneas. Mediante un canal de mensajes persistente,
DBMS_PIPE
permite que solo una operación, el envío de un mensaje o un mensaje de recepción, esté activo en un momento determinado. Sin embargo, si una operación no es posible debido a una operación en curso, el proceso vuelve a intentarlo periódicamente hasta que se alcanza el valortimeout
. -
Si utiliza Oracle Cloud Infrastructure Object Storage para almacenar mensajes, puede utilizar los URI nativos de Oracle Cloud Infrastructure o los URI de Swift. Sin embargo, el URI de ubicación y la credencial deben coincidir en el tipo de la siguiente manera:
-
Si utiliza un formato de URI nativo para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar la autenticación de claves de firma nativas de Oracle Cloud Infrastructure en el objeto de credencial.
-
Si utiliza el formato de URI de Swift para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar una autenticación de token de autenticación en el objeto de credencial.
-
Excepciones
Tabla 6-20 Excepción de función SEND_MESSAGE
Excepción | Descripción |
---|---|
|
Error de permiso. Privilegio insuficiente para escribir en el conducto. La tubería es privada y propiedad de otra persona. |
Procedimiento SET_CREDENTIAL_NAME
Este procedimiento define la variable credential_name
que se utiliza como credencial por defecto cuando los mensajes de conducción se almacenan en el almacén de objetos en la nube.
Sintaxis
DBMS_PIPE.SET_CREDENTIAL_NAME ( credential_name IN VARCHAR2 );
Parámetros
parámetro | Descripción |
---|---|
|
Nombre de la credencial para acceder a Cloud Object Storage. El valor |
Nota de Uso
Si utiliza Oracle Cloud Infrastructure Object Storage para almacenar mensajes, puede utilizar los URI nativos de Oracle Cloud Infrastructure o los URI de Swift. Sin embargo, el URI de ubicación y la credencial deben coincidir en el tipo de la siguiente manera:
-
Si utiliza un formato de URI nativo para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar la autenticación de claves de firma nativas de Oracle Cloud Infrastructure en el objeto de credencial.
-
Si utiliza el formato de URI de Swift para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar una autenticación de token de autenticación en el objeto de credencial.
Ejemplo
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME(
credential_name => 'my_cred1');
END;
/
Procedimiento SET_LOCATION_URI
Este procedimiento define la variable location_uri
global.
Sintaxis
DBMS_PIPE.SET_LOCATION_URI ( location_uri IN VARCHAR2 );
parámetro
parámetro | Descripción |
---|---|
location_uri |
URI de archivo o de objeto. El formato del URI depende del servicio de Cloud Object Storage que utilice. Para obtener más información, consulte DBMS_CLOUD Formato de URI. |
Nota de Uso
Si utiliza Oracle Cloud Infrastructure Object Storage para almacenar mensajes, puede utilizar los URI nativos de Oracle Cloud Infrastructure o los URI de Swift. Sin embargo, el URI de ubicación y la credencial deben coincidir en el tipo de la siguiente manera:
-
Si utiliza un formato de URI nativo para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar la autenticación de claves de firma nativas de Oracle Cloud Infrastructure en el objeto de credencial.
-
Si utiliza el formato de URI de Swift para acceder a Oracle Cloud Infrastructure Object Storage, debe utilizar una autenticación de token de autenticación en el objeto de credencial.
Ejemplo
BEGIN
DBMS_PIPE.GET_LOCATION_URI(
location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/