4D v16

Procedimentos armazenados

Página Inicial

 
4D v16
Procedimentos armazenados

Procedimentos armazenados  


 

O termo "Procedimento armazenado" vem do mundo dos servidores SQL. Quando uma estação de cliente envia uma solicitação para um servidor SQL, ele na verdade envia texto em linguagem SQL ao servidor SQL. Este pedido é sintaticamente (parsing) e é executado no servidor SQL antes de executá-lo. Obviamente, se o texto do pedido é importante, e se a solicitação é enviada várias vezes durante uma sessão, você pode levar um longo tempo enviar o código na rede, a análise e a interpretação do pedido. Assim, a idéia era encontrar uma maneira de enviar o pedido através da rede, analisados e interpretados uma vez e, em seguida, unicamente executado cada vez que receba de uma estação cliente. A solução foi preservar o código fonte do pedido (em outras palavras, um procedimento) no servidor e que o cliente envie uma solicitação com apenas o nome do procedimento para executar. O procedimento é, portanto, "guardado" no servidor e daí vem o termo "procedimento armazenado."

Observe que um procedimento armazenado SQL é um procedimento que pode receber parâmetros de uma estação cliente, execute as tarefas para as quais foi criado (de forma síncrona ou assíncrona) e possivelmente retornar um resultado para o cliente. Quando um cliente solicita a execução de um procedimento armazenado, em certa medida, ele delega a execução do código no computador do servidor.

Ainda que utilizamos o termo utilizado na indústria, as funções dos procedimentos armazenados de 4D Server superam significativamente o conceito regular de procedimentos armazenados.

Com 4D em modo local, quando utiliza um comando como New process, pode abrir um processo usuário no qual pode executar um método. Este método é chamado um método processo (ver a seção Métodos de projeto no manual Linguagem de 4D).

Pode fazer o mesmo com 4D Server, em um computador cliente. Além disso, utilizando o comando Execute on server na máquina servidor, pode iniciar um processo de usuário na qual executar um método. Além disso, utilizando o comando EXECUTE ON CLIENT, pode correr um método em outro processo em um cliente diferente.
Em ambos casos, o método é chamado um procedimento armazenado e por extensão, o processo iniciado na máquina servidor ou outro computador cliente também chamado procedimento armazenado.

Importante: A diferença principal entre um procedimento armazenado SQL e um procedimento armazenado 4D Server como no primeiro caso você executa um procedimento SQL, no segundo caso, execute um processo 4D autônomo. 

Como um processo 4D normal, um procedimento armazenado tem seu próprio ambiente:

  • Uma seleção atual por tabela: cada procedimento armazenado tem sua própria seleção atual. Uma tabela pode ter uma seleção atual diferente em cada procedimento armazenado.
  • Um registro atual por tabela: cada tabela pode ter um registro atual diferente em cada procedimento armazenado.
  • Variáveis: cada procedimento armazenado tem suas próprias variáveis processo. As variáveis processo são reconhecidas unicamente no contexto do procedimento armazenado ao qual pertencem.
  • Tabela por padrão: cada procedimento armazenado tem sua própria tabela por padrão.
  • Conjuntos processo: cada procedimento armazenado tem seu próprio conjunto processos.
  • On Error Call: cada procedimento armazenado tem seu próprio método de gestão de erros.
  • Janela de depuração: cada procedimento armazenado tem sua própria janela de depuração.

Em términos de interface de usuário, um procedimento armazenado pode abrir janelas e mostrar dados (DISPLAY RECORD).
Um procedimento armazenado executado em uma máquina cliente 4D permite a entrada de dados.
Por outra parte, um procedimento armazenado executado no servidor não permite a entrada de dados.

Pode iniciar tantos procedimentos armazenados como autorize o sistema (hardware e memória). Na verdade, a máquina servidor deve ser considerada como uma máquina que não só responde aos clientes 4D e aos navegadores web, e também é capaz de executar processos que interagem com outros processos que passam na máquina servidor e nas máquinas remotas.

Da mesma forma que 4D oferece um entorno multitarefas aos processos usuário que passam na máquina, 4D Server oferece um entorno multitarefas aos procedimentos armazenados. Por exemplo, 4D Server mantém uma tabela das variáveis interprocesso que podem ser utilizadas pelos processos armazenados para que se comuniquem entre eles.

Nota: A propriedade de método "Executar em servidor" permite executar um método em um processo no servidor, mas o método utiliza um processo "twinned" do processo cliente, que lhe permite em particular ser beneficiado do ambiente deste processo cliente. Neste caso, não é um procedimento armazenado 4D. Para maior informação, consulte a seção Executar no atributo servidor.

Grande parte das funções dos processos e comandos descritas no manual de Linguagem 4D aplicam também aos procedimentos armazenados, exceto pela entrada de dados para os procedimentos armazenados executados no servidor.

Um procedimento armazenado pode adicionar, pesquisar, ordenar, atualizar ou apagar registros. Um procedimento armazenado pode utilizar conjuntos e seleções temporais, acessar a documentos no disco, trabalhar com BLOBs, imprimir registros, etc. Pense simplesmente que no lugar de fazer algo na máquina 4D local, ele faz na máquina servidor ou em várias máquinas clientes.

Uma vantagem evidente dos procedimentos armazenados executados no servidor é que precisamente um procedimento armazenado se executa na máquina servidor, aonde se encontra o motor da base de dados. Por exemplo, um APPLY TO SELECTION não é eficiente na rede, mas é ao interior de um procedimento armazenado. O exemplo proposto na seção Importação baseada nos procedimentos armazenados (exemplo) mostra a importante otimização do rendimento que pode alcançar implementando um procedimento armazenado.

Os procedimentos armazenados executados em um ou várias máquinas clientes permitem otimizar a otimização da repartição de tarefas entre clientes e a comunicação entre várias máquinas clientes. Consulte o comando REGISTER CLIENT no manual de Linguagem para ver um exemplo de procedimentos armazenados executados em várias máquinas clientes.

No entanto, a vantagem principal da arquitetura dos procedimentos armazenados é a dimensão adicional que da a 4D Server. Utilizando procedimentos armazenados pode implementar seus próprios serviços 4D Server. O único limite é sua imaginação. O exemplo na seção Importação baseada nos procedimentos armazenados (exemplo) mostra um procedimento armazenado que oferece informação sobre 4D Server a seus clientes. Pode, por exemplo, listar os volumes da máquina servidor. Este exemplo pode ser expandido facilmente para reenviar a informação sobre os diretórios ou documentos ao cliente.

Geralmente, os procedimentos armazenados executados no servidor não devem realizar operações que impliquem elementos de interface (tal como menus, janelas, formulários...). Os mecanismos de gestão de interface não são lidados no servidor.
Devem ser evitados os comandos que provocam a aparição de caixas de diálogo no computador servidor bem como as caixas de diálogo com entrada de dados. 

Esta é a lista de comandos que NÃO deve utilizar em procedimentos armazenados executados no servidor. Estes comandos se classificam em três categorias:

  • Comandos proibidos no servidor
A presença de um destes comandos em um procedimento armazenado provoca a aparição de uma caixa de diálogo de alerta que indica que o comando não pode ser executado em 4D Server. É retornado o erro #67, o qual pode ser interceptado por meio de um método instalado pelo 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

• Comandos inapropriados no servidor

A utilização destes comandos em procedimentos armazenados não é recomendável como seu funcionamento não se adapta a uma execução no servidor. Estes comandos podem ser bloqueados pelo servidor, provocar erros e não produzem os efeitos esperados. Não é devolvido um código de erro 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
Form event
FIRST PAGE
FORM Get current page
FORM GET PROPERTIES
FORM GOTO PAGE
LAST PAGE
NEXT PAGE
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
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) Unicamente quando o primeiro parâmetro é uma cadeia vazia.

(2) Unicamente quando a sintaxes utilizada provoca a aparição da caixa de diálogo (ex.: ORDER BY([Table])).

  • Comandos sem efeito no servidor
Os seguintes comandos não têm efeito quando se executam em um procedimento armazenado no servidor. Não é devolvido nenhum código de erro específico.

GRAPH
MESSAGES OFF
MESSAGES ON
SET MENU BAR
SHOW TOOL BAR

  • Desde 4D, pode iniciar manualmente um procedimento armazenado na caixa de diálogo de execução do método:

Pode executar em 4D Server ou em outra máquina 4D client. Note que para as máquinas clientes 4D nesta lista, devem ter sido registrados (ver a seção Procedimentos armazenados nas máquinas clientes e o comando REGISTER CLIENT).

Nota: Não é possível utilizar os comandos de gestão de processos DELAY PROCESS, PAUSE PROCESS e RESUME PROCESS desde um 4D remoto com procedimentos armazenados no servidor.

  • Um método executado em 4D Server (método base do servidor, método com atributo Executar em servidor, trigger ou procedimento armazenado) pode iniciar um procedimento armazenado com a ajuda dos comandos Execute on server, New process ou EXECUTE ON CLIENT.

Os procedimentos armazenados podem comunicar-se entre eles utilizando:

Consulte as seções correspondentes do manual Linguagem de 4D. Novamente, lembre que os comandos 4D atuem dentro do alcance da máquina que executa o procedimento armazenado (servidor ou clientes) da mesma forma que no local em uma máquina cliente.

Nota: Os mecanismos CALL PROCESS e Outside call não tem significado na máquina servidor, porque os procedimentos armazenados não tem uma interface usuário com entrada de dados.

Também há outra funcionalidade importante: os processos usuário dos clientes (processos que passam em uma máquina cliente) podem ler e escrever as variáveis processo (*) de um procedimento armazenado, utilizando os comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE e VARIABLE TO VARIABLE.

(*) Assim como as variáveis interprocesso da máquina servidor.

Importante: A comunicação processo “Inter máquina”, oferecida pelos comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE e VARIABLE TO VARIABLE, somente é possível o fechamento cliente ao servidor. Sempre é um processo cliente que lê ou escreve as variáveis de um procedimento armazenado.



Ver também 

Importação baseada nos procedimentos armazenados (exemplo)
Serviços baseados nos procedimentos armazenados (exemplo)

 
PROPRIEDADES 

Produto: 4D
Tema: 4D Server e a linguagem 4D

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de 4D Server ( 4D v16)