Seleccionar página

Oracle 23c – Obtener información de los objetos Javascript

Diccionario Datos

Escrito por: Eddie Molina

Oracle ACE Pro. Oracle APEX Cloud Developer Certified Professional. Presidente de ORAUGCRC (Grupo de Usuarios Oracle de Costa Rica). Miembro de líderes de LAOUC. Conferencista, consultor, desarrollador y capacitador en tecnologías Oracle, especialmente Oracle Application Express con más de 30 años de experiencia.

15/04/2023

Que hay de nuevo

Hasta el momento, en esta serie de artículos sobre la funcionalidad de procedimientos almacenados Javascript en la nueva base de datos Oracle 23c, hemos visto:

En este nuevo artículo, vamos a tratar el tema de cómom obtener información sobre los módulos Javascript desde el diccionario de datos de la base de datos.

Para esto, vamos a hacer uso de dos vistas específicas:

USER_SOURCE

La vista USER_SOURCE contiene las mismas columnas que ALL_SOURCE, con excepción de OWNER y describe el código fuente de los objetos almacenados para el usuario actual.

Las columnas de la vista son:

Columna Tipo de Datos NULA Descripción
NAME VARCHAR2(128) NOT NULL Nombre del objecto
TYPE VARCHAR2(12) Tipo de objecto: FUNCTION, JAVA SOURCE, PACKAGE, PACKAGE BODY, PROCEDURE, TRIGGER, TYPE, TYPE BODY
LINE NUMBER NOT NULL Número de línea de esta línea de código fuente
TEXT VARCHAR2(4000) Texto fuente del objeto almacenado
ORIGIN_CON_ID VARCHAR2(256)

El ID del contenedor donde se originan los datos. Los valores posibles incluyen:

  • 0: Este valor se usa para filas que no están en un CDB. Este valor no es usado para CDBs.
  • n: Este valor es usado para filas que contienen datos que se originan en el contenedor con ID de contenedor n (n = 1 si la fila se origina en root)

La línea de comando necesaria para mostrar el código fuente de un módulo para el usuario actual, es (recuerde que todos los ejemplos en las entregas anteriores los hemos realizado en el usuario TEST):

donde MOD_NAME en la línea 4 del comando, corresponde al nombre del módulo del cual desea obtener el código fuente.

Si lo que desea es saber los nombres de todos los módulos MLE para el usuario actual, el comando a utilizar es:

Este comando generará una salida similar a la siguiente:

NAME
____________________
CUADRADO_MOD
HELLOWORLD_MODULE
HOLAMUNDO_MOD

En mi usuario de esquema de base de datos TEST, en este momento existen 3 módulos MLE con nombres CUADRADO_MOD, HELLOWORLD_MODULE y HOLAMUNDO_MOD.

Retomando el código de ejemplo inicial, si deseamos ver las líneas de código fuente del módulo CUADRADO_MOD, debemos ejecutar el comando:

La salida de este comando mostrará algo similar a lo siguiente:

LINE TEXT
_______ ________________________________________________________________
1 function cuadrado(num) {
2 if(num == 0) {
3 console.log(‘El valor proporcionado es cero y no tiene un valor cuadrado.’);
4 } else {
5 console.log(num * num);
6 }
7 }
8
9 export { cuadrado }

9 rows selected.

Por un lado tenemos el número de cada línea de código, y por otro, el código Javascript de cada una de ellas.

USER_MLE_MODULES

La vista USER_MLE_MODULES describe los módulos Oracle Database Multilingual Engine (MLE) del usuario actual, contiene las mismas columnas que ALL_MLE_MODULES, a excepción de la columna MODULE_OWNER.

Su estructura es la siguiente:

Columna Tipo de Datos NULO Descripción

MODULE_NAME

VARCHAR2(128)

NOT NULL

Nombre del módulo MLE

MODULE_ID

NUMBER

NOT NULL

Número de objecto del módulo MLE

MODULE

BLOB

NOT NULL

Contenido del módulo MLE

LANGUAGE_OWNER

VARCHAR2(128)

Dueño del lenguaje MLE del módulo MLE

LANGUAGE_NAME

VARCHAR2(128)

NOT NULL

Nombre del lenguaje MLE del módulo MLE

VERSION

VARCHAR2(256)

Número de versión del módulo MLE

METADATA

CLOB

Metadatos del módulo MLE

TYPE

VARCHAR2(7)

Tipo del módulo MLE:

  • TEXT

  • UNKNOWN

Conociendo esto, si quisieramos obtener la información de nombre de módulo, versión y metadata de los módulos Javascript en nuestro esquema de base de datos, ejecutamos el comando:

El resultado de ejecutar el comando anterior, nos debería mostrar una salida similar a la siguiente:

MODULE_NAME VERSION METADATA
____________________ __________ ___________
HOLAMUNDO_MOD
HELLOWORLD_MODULE
CUADRADO_MOD

En caso de que hallamos definido información de versión y metadatos, estos se mostrarían en las columnas 2 y 3 de la consulta.

Esta es otra forma de encontrar los nombres de los módulos MLE en nuestro esquema de base de datos.

USER_MLE_PROCEDURES

De la vista USER_MLE_PROCEDURES, podemos obtener información sobre los procedimientos PL/SQL definidos para llamar a los funciones y procedimientos definidos en los módulos MLE.

La estructura de esta vista es la siguiente:

Columna Tipo de Datos NULO Descripción

OBJECT_NAME

VARCHAR2(128)

NOT NULL

Nombre del objeto de nivel superior

  • Para una función o procedimiento definido en un paquete o tipo, esta columna muestra el nombre del paquete o tipo.

  • Para una función o procedimiento en solitario, esta columna muestra el nombre de la función o procedimiento.

PROCEDURE_NAME

VARCHAR2(128)

Nombre de la función o procedimiento

  • Para una función o procedimiento definida en un paquete o tipo, esta columna muestra el nombre de la función o procedimiento.

  • Para una función o procedimiento en solitario, el valor de esta columna es nulo.

OBJECT_ID

NUMBER

NOT NULL

Número de objeto del objeto mostrado en OBJECT_NAME.

SUBPROGRAM_ID

NUMBER

NOT NULL

Identificador único del subprograma

SIGNATURE

CLOB

 

Firma de la función o procedimiento (en el lenguaje de destino)

MODULE_OWNER

VARCHAR2(128)

 

Dueño del modulo MLE de nivel máximo

MODULE_NAME

VARCHAR2(128)

 

Nombre del módulo MLE de nivel máximo

ENV_OWNER

VARCHAR2(128)

 

Dueño del ambiente MLE

ENV_NAME

VARCHAR2(128)

 

Nombre del ambiente MLE

LANG_OWNER

VARCHAR2(128)

 

Dueño del lenguaje MLE

LANG_NAME

VARCHAR2(128)

 

Nombre del lenguaje MLE

SRC

CLOB

 

Texto del código fuente de la función o procedimiento

El comando anterior nos devuelve el nombre del procedimiento o función, id de objeto, firma y nombre de módulo de los procedimientos MLE definidos en nuestro usuario actual de base de datos. Su ejecución produce una salida similar a la siguiente:

OBJECT_NAME OBJECT_ID SIGNATURE MODULE_NAME
__________________ ____________ __________________ ____________________________
CUADRADO_PROC      85519 cuadrado(p_num) CUADRADO_MOD
HOLAMUNDO_PROC 85515 holamundo()           HOLAMUNDO_MOD
HELLOWORLD_PROC 85517 helloWorld()    HELLOWORLD_MODULE

Con esta consulta, podemos ver cuales procedimientos o funciones hacen llamados a cuales funciones Javascript en los módulos MLE definidos

Conoce más …

Para conocer más acerca de este tema, puedes consultar los documentos en los enlaces a continuación:

Oracle Database New Features

Javascript Developer’s Guide

También te puede gustar…

Alcance de Acciones Dinámicas

Alcance de Acciones Dinámicas

Las acciones dinámicas son una de las características más importantes de APEX, puesto que nos permiten extender...

Share This