Net.Data: Guida alla gestione e alla programmazione per OS/400

Procedure memorizzate

Una procedura memorizzata è un programma compilato, memorizzato su DB2 locale o su server remoto, che può eseguire istruzioni SQL. In Net.Data, le procedure memorizzate vengono chiamate dalle funzioni di Net.Data che utilizzano l'istruzione CALL SQL. I parametri delle procedure memorizzate vengono trasferiti dall'elenco dei parametri della funzione di Net.Data. E' possibile utilizzare le procedure memorizzate per migliorare le prestazioni e l'integrità mantenendo istruzioni SQL compilate con i il server di database.

Questa sezione descrive i seguenti argomenti:

Sintassi della procedura memorizzata

La sintassi della procedura memorizzata utilizza l'istruzione FUNCTION, l'istruzione CALL e, facoltativamente, un blocco REPORT.

%function
(dtw_sql) nome_funzione ([IN datatype arg1, INOUT datatype arg2, 
    OUT nometabella, ...])
  CALL procedura_memorizzata 
[%REPORT(nomeserierisultati...)]

In cui:

nome_funzione
è il nome della funzione di Net.Data che chiama la procedura memorizzata.

procedura_memorizzata
è il nome della procedura memorizzata

tipodati
è uno dei tipi di dati di database supportati da Net.Data come riportato in Tabella 2. I tipi di dati specificati nell'elenco parametri deve corrispondere al tipo di dati della procedura memorizzata. Consultare la documentazione relativa al database per ulteriori informazioni su questi tipi di dati.

nometabella
è il nome di una tabella di Net.Data in cui la serie di risultati deve essere memorizzata (utilizzata solo quando la serie di risultati deve essere memorizzata in una tabella di Net.Data). Se viene specificato, questo nome parametro deve corrispondere al nome parametro associato a nomeserierisultati.

nomeserierisultati
un nome che associa una serie di risultati restituiti dalla procedura memorizzata ad un blocco di prospetto. Questo nome parametro deve corrispondere al nome parametro associato a nometabella.

Tabella 2. Tipi di dati per le procedure memorizzate
CHAR FLOAT TIME
DATE GRAPHIC TIMESTAMP
DECIMAL INTEGER VARCHAR
DOUBLE REAL VARGRAPHIC
DOUBLEPRECISION SMALLINT






Chiamata alla procedura memorizzata

Per chiamare una procedura memorizzata:

  1. Definire una funzione che inizia una chiamata per la procedura memorizzata.
    %function (dtw_sql) nome_funzione() 
    

  2. E' anche possibile specificare parametri IN, INOUT o OUT per la procedura memorizzata, compreso il nome serie di risultai dei risultati restituiti dalla procedura memorizzata.
    %function (dtw_sql)
    nome_funzione (IN datatype
    arg1, INOUT datatype arg2, OUT
    nometabella...) 
    

  3. Utilizzare l'istruzione CALL per identificare il nome della procedura memorizzata.
     CALL procedura_memorizzata
    

  4. Se la procedura memorizzata genera una serie di risultati, è anche possibile specificare un blocco REPORT per definire come Net.Data visualizza la serie di risultati.
    %report
     {
    ...
    %}
    

    Esempio:

    %function (dtw_sql) mystoredproc (IN CHAR(30) arg1 OUT mytable)  {
      CALL myproc   
     %report {
      ...
      %row {  ...   %}
      ...   
     %} 
    %}
    

  5. Se la procedura memorizzata genera più di una serie di risultati:

Trasferimento dei parametri

E' possibile trasferire i parametri ad una procedura memorizzata ed è possibile che questa aggiorni i valori di parametro in modo che il nuovo valore venga riportato di nuovo alla macro di Net.Data. Il parametro viene trasferito alla procedura memorizzata specificando il nome parametro con la parola chiave IN. Se la procedura memorizzata deve aggiornare il parametro, è necessario trasferire il parametro per il valore restituito con le parole chiave INOUT o OUT. Il tipo di dati specificato per un parametro deve corrispondere a ciò che la procedura memorizzata prevede.

Esempio 1: Trasferimento di un valore di parametro alla procedura memorizzata

%function (dtw_sql) mystoredproc (IN CHAR(30) valuein)  {
  CALL myproc 
...

Esempio 2: Restituzione di un valore da una procedura memorizzata

%function (dtw_sql) mystoredproc (OUT VARCHAR(9) retvalue)  {
  CALL myproc  
...

Elaborazione delle serie di risultati

Da una procedura memorizzata è possibile restituire una o più serie di risultati. Le serie di risultati possono essere memorizzate nelle tabelle di Net.Data per ulteriori elaborazioni all'interno della macro o anche visualizzate tramite un blocco REPORT. E' necessario associare un nome ad ogni serie di risultati generata dalla proceudra memorizzata. Ciò viene reso possibile specificando i parametri sull'istruzione FUNCTION. Il nome specificato per una serie di risultati può quindi essere associato ad un blocco REPORT o ad una tabella di Net.Data, consentendo di stabilire come ogni serie di risultati viene elaborata da Net.Data. E' possibile:

Le serie di risultati vengono sempre memorizzate nelle tabelle locali in modo che un'altra funzione possa utilizzare i dati in un secondo momento all'interno del file della macro. Ad esempio, è possibile trasferire una tabella di Net.Data ad un'altra funzione in modo da poter utilizzare i dati per i calcoli e visualizzare i risultati in base a questi calcoli.

Consultare Indicazioni e limiti per i blocchi REPORT multipli per indicazioni e limiti quando vengono utilizzati i blocchi di prospetto multipli.

Per restituire una singola serie di risultati e visualizzarla utilizzando un prospetto predefinito:

Utilizzare la seguente sintassi:

%function (dtw_sql)
nome_funzione (OUT nometabella) {
     CALL procedura_memorizzata 
%}

Ad esempio:

 %function (dtw_sql) mystoredproc(OUT mytable1) {
  CALL myproc 
%}

Per restituire una singola serie di risultati e specificare un blocco REPORT per l'elaborazione di visualizzazione:

Utilizzare la seguente sintassi:

%function (dtw_sql)
nome_funzione (OUT nometabella) {
     CALL procedura_memorizzata
 %REPORT (nomeseriedirisultati) {
  ...
 %}
%}

Ad esempio:

%function (dtw_sql) mystoredproc (OUT mytable1) {
  CALL myproc   
 %REPORT (mytable1) {
      ...
      %row {  ...   %}
      ...  
 %} 
%}

In alternativa, è possibile utilizzare la seguente sintassi:

%function (dtw_sql) nome_funzione () {
    CALL procedura_memorizzata  
 
 %REPORT () {
  ...
 %}
%}

Ad esempio:

%function (dtw_sql) mystoredproc () {
    CALL myproc   
 %REPORT  {
  ...      
  %row {  ...   %}
  ...  
 %} 
%}

Per restituire più serie di risultati e visualizzarli utilizzando la formattazione di prospetto predefinito:

Utilizzare la seguente sintassi:

%function (dtw_sql)
nome_funzione (OUT tablename1, tablename2) {
    CALL procedura_memorizzata 
%}

Dove non viene specificato alcun blocco di prospetto.

Ad esempio:

%define DTW_DEFAULT_REPORT = "MULTIPLE"
%function (dtw_sql) mystoredproc (OUT mytable1, mytable2) {       
    CALL myproc  
%}

Per restituire più serie di risultati e specificare blocchi REPORT per l'elaborazione di visualizzazione:

Ogni serie di risultati viene associata al proprio blocco REPORT. Utilizzare la seguente sintassi:

%function
(dtw_sql) nome_funzione ( OUT tablename1, tablename2) {
    CALL procedura_memorizzata 
%REPORT(nomeseriedirisultati1) 
   ...      
   %row {  ...   %}   
   ...   
 %}    
 %REPORT (nomeseriedirisultati2)
   ...      
   %row {  ...   %} 
   ...   
 %} 
%}

Ad esempio:

%function (dtw_sql) mystoredproc (OUT mytable1, mytable2) {  
   CALL myproc    
 
 %REPORT (mytable1) {     
  ...    
  %row {  ...   %}     
  ...  
 %}   
 
 %REPORT(mytable2) {     
  ...     
  %row {  ...   %}     
  ...  
 %} 
%}


[ Inizio pagina | Pagina precedente | Pagina successiva | Indice | Indice analitico ]