Richiamo delle procedure memorizzate

Per richiamare una procedura memorizzata in un database, utilizzare l'istruzione ESQL CALL. La procedura memorizzata deve essere definita da un'Istruzione CREATE PROCEDURE che abbia:
  • Una clausola Language di DATABASE
  • Una clausola EXTERNAL NAME che identifica il nome della procedura nel database e, facoltativamente, lo schema di database a cui appartiene.

Quando si richiama una procedura memorizzata con l'istruzione CALL, il broker assicura che la definizione ESQL e la definizione del database corrispondano:

All'utilizzo delle procedure memorizzate sono applicate le seguenti limitazioni:

Creazione di una procedura memorizzata in ESQL

Quando si definisce una procedura ESQL che corrisponde a una procedura memorizzata nel database, è possibile specificare un nome qualificato (in cui il qualificatore è uno schema di database) o un nome non qualificato.

Per creare una procedura memorizzata:

  1. Codificare un'istruzione simile a questo esempio per creare una procedura non qualificata:
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    L'EXTERNAL NAME specificato deve corrispondere alla definizione creata nel database, ma è possibile specificare qualsiasi nome per la procedura ESQL corrispondente.

  2. Codificare un'istruzione simile a questo esempio per creare una procedura qualificata:
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. Codificare un'istruzione simile a questo esempio per creare una procedura qualificata in un pacchetto Oracle:
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL 
                     NAME "mySchema.myPackage.myProc";
Per esempi sulle definizioni di procedura memorizzata nel database, consultare la sezione Istruzione CREATE PROCEDURE.

Richiamo di una procedura memorizzata

  1. Codificare un'istruzione simile a questo esempio per richiamare una procedura non qualificata:
    CALL myProc1('HelloWorld');

    Poiché non è definita esplicitamente come appartenente a qualche schema, la procedura myProc1 deve esistere nello schema predefinito (il cui nome è il nome utente utilizzato per collegarsi all'origine dati), altrimenti il comando avrà esito negativo.

  2. Il seguente esempio richiama la procedura myProc nello schema Schema1.
    CALL myProc2('HelloWorld');
  3. Codificare un'istruzione simile a questo esempio per richiamare una procedura non qualificata con uno schema dinamico:
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    Questa istruzione richiama la procedura myProc1 nel database Schema2, sovrascrivendo lo schema predefinito "username".

Richiamo di una procedura memorizzata che restituisce due serie di risultati

Per richiamare una procedura memorizzata che riceve un parametro di input e restituisce un parametro di output e due serie di risultati:
  1. Definire la procedura con un'istruzione CREATE PROCEDURE che specifica un parametro di input, un parametro di output e due serie di risultati:
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. Per richiamare la procedura myProc1 utilizzando un riferimento di campo, codificare:
    /* using a field reference */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[], 
                OutputRoot.XML.Test.ResultSet2[]);
  3. Per richiamare la procedura myProc1 utilizzando una variabile di riferimento, codificare:
    /* using a reference variable*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[], 
                         cursor.ResultSet2[]);
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac17040_