4D v16

Procedimientos almacenados

Inicio

 
4D v16
Procedimientos almacenados

Procedimientos almacenados  


 

La expresión "Procedimiento almacenado" proviene del mundo de los servidores SQL. Cuando una estación cliente envía una petición a un servidor SQL, envía en realidad texto en lenguaje SQL al servidor SQL. Esta petición se analiza sintácticamente (parsing) y es interpretada en el servidor SQL antes de ejecutarse. Obviamente, si el texto de la petición es importante y si la petición se envía varias veces durante una sesión, puede tomar mucho tiempo el envío del código en la red, el análisis y la interpretación de la petición. Así que la idea era encontrar una forma de enviar la petición por la red, analizada e interpretada de una vez y luego ejecutarla únicamente cada vez que se reciba de una estación cliente. La solución era conservar el código fuente de la petición (en otras palabras, un procedimiento) en el servidor y que el cliente envíe una petición con únicamente el nombre del procedimiento a ejecutar. El procedimiento es por lo tanto “guardado” en el servidor y de ahí viene el término “procedimiento almacenado.”

Note que un procedimiento almacenado SQL es un procedimiento que puede recibir parámetros de una estación cliente, ejecutar las tareas para las que fue creado (de manera sincrónica o asincrónica) y posiblemente devolver un resultado al cliente. Cuando un cliente solicita la ejecución de un procedimiento almacenado, en cierta medida, delega la ejecución del código en el equipo servidor.

Aunque utilizamos el término utilizado en la industria, las funcionalidades de los procedimientos almacenados de 4D Server superan significativamente el concepto regular de procedimientos almacenados.

Con 4D en modo local, cuando utiliza un comando como New process, puede abrir un proceso usuario en el cual puede ejecutar un método. Este método se llama un método proceso (ver la sección Métodos de proyecto en el manual Lenguaje de 4D).

Puede hacer lo mismo con 4D Server, en un equipo cliente. Además, utilizando el comando Execute on server en el equipo servidor, puede iniciar un proceso de usuario en el cual ejecutar un método. Además, utilizando el comando EXECUTE ON CLIENT, puede correr un método en otro proceso en un cliente diferente.
En ambos casos, el método se llama un procedimiento almacenado y por extensión, el proceso iniciado en el equipo servidor u otro equipo cliente también llamado procedimiento almacenado.

Importante: la diferencia principal entre un procedimiento almacenado SQL y un procedimiento almacenado 4D Server es que en el primer caso usted ejecuta un procedimiento SQL, en el segundo caso, ejecute un proceso 4D autónomo.

Como un proceso 4D normal, un procedimiento almacenado tiene su propio entorno:

  • Una selección actual por tabla: cada procedimiento almacenado tiene su propia selección actual. Una tabla puede tener una selección actual diferente en cada procedimiento almacenado.
  • Un registro actual por tabla: cada tabla puede tener un registro actual diferente en cada procedimiento almacenado.
  • Variables: cada procedimiento almacenado tiene sus propias variables proceso. Las variables proceso son reconocidas únicamente en el contexto del procedimiento almacenado al cual pertenecen.
  • Tabla por defecto: cada procedimiento almacenado tiene su propia tabla por defecto.
  • Conjuntos proceso: cada procedimiento almacenado tiene su propia conjunto procesos.
  • On Error Call: cada procedimiento almacenado tiene su propio método de gestión de errores.
  • Ventana de depuración: cada procedimiento almacenado tiene su propia ventana de depuración.

En términos de interfaz de usuario, un procedimiento almacenado puede abrir ventanas y mostrar datos (DISPLAY RECORD).
Un procedimiento almacenado ejecutado en un equipo cliente 4D permite la entrada de datos.
Por otra parte, un procedimiento almacenado ejecutado en el servidor no permite la entrada de datos.

Puede iniciar tantos procedimientos almacenados como lo autorice el sistema (hardware y memoria). De hecho, la máquina servidor debe considerarse como una máquina que no sólo responde a los clientes 4D y a los navegadores web, sino también es capaz de ejecutar procesos que interactúan con otros procesos que corren en el equipo servidor y en las máquinas remotas.

De la misma forma que 4D ofrece un entorno multitareas a los procesos usuario que corren en la máquina, 4D Server ofrece un entorno multitareas a los procedimientos almacenados. Por ejemplo, 4D Server mantiene una tabla de las variables interproceso que pueden ser utilizadas por los procesos almacenados para comunicarse entre ellos.

Nota: la propiedad de método "Ejecutar en servidor" permite ejecutar un método en un proceso en el servidor, pero el método utiliza un proceso "twinned" del proceso cliente, que le permite en particular beneficiarse del entorno de este proceso cliente. En este caso, no es un procedimiento almacenado 4D. Para mayor información, consulte la sección Atributo Ejecutar en servidor.

Gran parte de las funcionalidades de los procesos y comandos descritas en el manual Lenguaje 4D aplican también a los procedimientos almacenados, excepto por la entrada de datos para los procedimientos almacenados ejecutados en el servidor.

Un procedimiento almacenado puede añadir, buscar, ordenar, actualizar o borrar registros. Un procedimiento almacenado puede utilizar conjuntos y selecciones temporales, acceder a documentos en el disco, trabajar con BLOBs, imprimir registros, etc. Piense simplemente que en lugar de hacer algo en la máquina 4D local, lo hace en el equipo servidor o en varios equipos clientes.

Una ventaja evidente de los procedimientos almacenados ejecutados en el servidor es que precisamente un procedimiento almacenado se ejecuta en el equipo servidor, donde se encuentra el motor de la base de datos. Por ejemplo, un APPLY TO SELECTION no es eficiente en la red, pero lo es al interior de un procedimiento almacenado. El ejemplo propuesto en la sección Importación con procedimientos almacenados (ejemplo) muestra la importante optimización del rendimiento que puede alcanzar implementando un procedimiento almacenado.

Los procedimientos almacenados ejecutados en uno o varios equipos clientes permiten optimizar la optimización de la repartición de tareas entre clientes y la comunicación entre varios equipos clientes. Consulte el comando REGISTER CLIENT en el manual Lenguaje para ver un ejemplo de procedimientos almacenados ejecutados en varios equipos clientes.

Sin embargo, la ventaja principal de la arquitectura de los procedimientos almacenados es la dimensión adicional que da a 4D Server. Utilizando procedimientos almacenados puede implementar sus propios servicios 4D Server. El único límite es su imaginación. El ejemplo en la sección Importación con procedimientos almacenados (ejemplo) muestra un procedimiento almacenado que ofrece información sobre 4D Server a sus clientes. Puede, por ejemplo, listar los volúmenes del equipo servidor. Este ejemplo puede expandirse fácilmente para reenviar la información sobre los directorios o documentos al cliente.

De manera general, los procedimientos almacenados ejecutados en el servidor no deben efectuar operaciones que impliquen elementos de interfaz (tal como menús, ventanas, formularios...). Los mecanismos de gestión de interfaz no se manejan en el servidor.
Deben evitarse los comandos que provocan la aparición de cajas de diálogo en el equipo servidor así como también las cajas de diálogo con entrada de datos. 

Esta es la lista de comandos que NO debe utilizar en procedimientos almacenados ejecutados en el servidor. Estos comandos se clasifican en tres categorías:

  • Comandos prohibidos en el servidor
La presencia de uno de estos comandos en un procedimiento almacenado provoca la aparición de una caja de diálogo de alerta que indica que el comando no puede ejecutarse en 4D Server. Se devuelve el error #67, el cual puede interceptarse por medio de un método instalado por el comando ON ERR CALL.

ACCUMULATE
ADD RECORD
_o_ADD SUBRECORD
APPEND MENU ITEM
BREAK LEVEL
CALL PROCESS
CHANGE LICENSES
Count menu items
Count menus
CREATE USER FORM
DELETE MENU ITEM
DELETE USER FORM
DISABLE MENU ITEM
DISPLAY SELECTION
EDIT ACCESS
EDIT FORM
ENABLE MENU ITEM
FILTER EVENT
Get menu item
Get menu item key
Get menu item mark
Get menu item style
Get menu title
SET PICTURE TO LIBRARY
_o_GRAPH TABLE
INSERT MENU ITEM
Level
LIST USER FORMS
Menu selected
MODIFY RECORD
MODIFY SELECTION
_o_MODIFY SUBRECORD
ON EVENT CALL
_o_Open external window
PAGE BREAK
PAGE SETUP
PRINT SETTINGS
QUERY BY EXAMPLE
QR REPORT
Printing page
REMOVE PICTURE FROM LIBRARY
SET MENU ITEM
SET MENU ITEM SHORTCUT
SET MENU ITEM MARK
SET MENU ITEM STYLE
SET PICTURE TO LIBRARY
SHOW MENU BAR
Subtotal

• Comando inapropiados en el servidor

La utilización de estos comandos en procedimientos almacenados no es recomendable ya que su funcionamiento no se adapta a una ejecución en el servidor. Estos comandos pueden bloquear el servidor, provocar errores y no producen los efectos esperados. No se devuelve un código de error específico.

ACCEPT
Activated
_o_ADD DATA SEGMENT
After
APPEND DATA TO PASTEBOARD
APPEND TO LIST
Before
BLOB TO DOCUMENT
BLOB to list
BRING TO FRONT
_o_C_GRAPH
CANCEL
CHANGE CURRENT USER
CHANGE PASSWORD
CLEAR LIST
CLEAR PASTEBOARD
Copy list
Count list items
Count screens
Create document(1)
_o_Create resource file(1)
Current form table
Current user
Deactivated
DELETE FROM LIST
DELETE USER
DIALOG
_o_DISABLE BUTTON
DRAG AND DROP PROPERTIES
DRAG WINDOW
Drop position
_o_During
_o_ENABLE BUTTON
ERASE WINDOW
EXPORT DATA(1)
FILTER KEYSTROKE
Find window
Focus object
FONT LIST
_o_Font name
_o_Font number
Evento formulario
FORM FIRST PAGE
FORM Get current page
FORM GET PROPERTIES
FORM GOTO PAGE
FORM LAST PAGE
FORM NEXT PAGE
FORM PREVIOUS PAGE
FORM SET INPUT
FORM SET OUTPUT
Frontmost process
Frontmost window
Get edited text
GET GROUP LIST
GET GROUP PROPERTIES
GET HIGHLIGHT
GET LIST ITEM
GET LIST ITEM PROPERTIES
GET LIST PROPERTIES
GET MOUSE
GET PASTEBOARD DATA
GET PICTURE FROM PASTEBOARD
Get text from pasteboard
GET USER LIST
GET USER PROPERTIES
GET WINDOW RECT
Get window title
GOTO OBJECT
GRAPH SETTINGS
HIDE PROCESS
HIDE TOOL BAR
HIDE WINDOW
HIGHLIGHT RECORDS
HIGHLIGHT TEXT
IMPORT DATA(1)
In break
In footer
In header
INSERT IN LIST
_o_INVERT BACKGROUND
Is a list
Is user deleted
Keystroke
List item parent
List item position
LIST TO BLOB
Load list
MAXIMIZE WINDOW
Menu bar height
Menu bar screen
MINIMIZE WINDOW
Modified
New list
Next window
OBJECT GET COORDINATES
OBJECT MOVE
OBJECT SET LIST BY NAME
OBJECT SET COLOR
OBJECT SET ENTERABLE
OBJECT SET FILTER
OBJECT SET FORMAT
OBJECT SET RGB COLORS
OBJECT SET TITLE
OBJECT SET VISIBLE
Old
Open document(1)
Open resource file(1)
ORDER BY(2)
Outside call
Pasteboard data size
Pop up menu
POST CLICK
POST EVENT
POST KEY
QUERY BY FORMULA(2)
QUERY(2)
REDRAW
_o_REDRAW LIST
REDRAW WINDOW
REGISTER CLIENT
REJECT
SAVE LIST
SCREEN COORDINATES
SCREEN DEPTH
Screen height
Screen width
Select folder
SELECT LIST ITEMS BY POSITION
SELECT LIST ITEMS BY REFERENCE
SELECT LOG FILE
Selected list items
Self
SET CURSOR
SET FIELD TITLES
Set group properties
SET LIST ITEM
SET LIST ITEM PROPERTIES
SET LIST PROPERTIES
SET PICTURE TO PASTEBOARD
SET SCREEN DEPTH
SET TABLE TITLES
SET TEXT TO PASTEBOARD
SET TIMER
Set user properties
SET WINDOW RECT
Shift down
SHOW PROCESS
SHOW WINDOW
SORT LIST
User in group
Validate password
Window kind
WINDOW LIST
Window process

(1) Únicamente cuando el primer parámetro es una cadena vacía.

(2) Únicamente cuando la sintaxis utilizada provoca la aparición de la caja de diálogo (ej.: ORDER BY([Table])).

  • Comandos sin efecto en el servidor
Los siguientes comandos no tienen efecto cuando se ejecutan en un procedimiento almacenado en el servidor. No se devuelve ningún código de error específico.

GRAPH
MESSAGES OFF
MESSAGES ON
SET MENU BAR
SHOW TOOL BAR

  • Desde 4D, puede lanzar manualmente un procedimiento almacenado en la caja de diálogo de ejecución del método:

Puede ejecutar en 4D Server o en otro equipo 4D client. Note que para los equipos clientes 4D en esta lista, deben haber sido registrados (ver la sección Procedimientos almacenados en los equipos clientes y el comando REGISTER CLIENT).

Nota: no es posible utilizar los comandos de gestión de procesos DELAY PROCESS, PAUSE PROCESS y RESUME PROCESS desde un 4D remoto con procedimientos almacenados en el servidor.

  • Un método ejecutado en 4D Server (método base del servidor, método con atributo Ejecutar en servidor, trigger o procedimiento almacenado) puede lanzar un procedimiento almacenado con la ayuda de los comandos Execute on server, New process o EXECUTE ON CLIENT.

Los procedimientos almacenados pueden comunicarse entre ellos utilizando:

Consulte las secciones correspondientes del manual Lenguaje de 4D. Nuevamente, recuerde que los comandos 4D actúan dentro del alcance del equipo que ejecuta el procedimiento almacenado (servidor o clientes) de la misma forma que en local en un equipo cliente.

Nota: los mecanismos CALL PROCESS y Outside call no tienen significado en el equipo servidor, porque los procedimientos almacenados no tienen una interfaz usuario con entrada de datos.

También hay otra funcionalidad importante: los procesos usuario de los clientes (procesos que corren en un equipo cliente) pueden leer y escribir las variables proceso (*) de un procedimiento almacenado, utilizando los comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE y VARIABLE TO VARIABLE.

(*) Como también las variables interproceso del equipo servidor.

Importante: la comunicación proceso “Intermáquina”, ofrecida por los comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE y VARIABLE TO VARIABLE, sólo es posible del cliente al servidor. Siempre es un proceso cliente el que lee o escribe las variables de un procedimiento almacenado.



Ver también 

Importación con procedimientos almacenados (ejemplo)
Servicios basados en los procedimientos almacenados (ejemplo)

 
PROPIEDADES 

Producto: 4D
Tema: 4D Server y el lenguaje 4D

 
HISTORIA 

 
ARTICLE USAGE

Manual de 4D Server ( 4D v16)