Chamando Procedimentos Armazenados

Para chamar um procedimento que está armazenado em um banco de dados, utilize a instrução ESQL CALL. O procedimento armazenado deve ser definido por um Instrução CREATE PROCEDURE que tenha:
  • Uma cláusula Language igual a DATABASE
  • Uma cláusula EXTERNAL NAME que identifique o nome do procedimento no banco de dados e, como opção, o esquema do banco de dados ao qual ele pertence.

Ao chamar um procedimento armazenado com a instrução CALL, o intermediário assegurará que a definição ESQL e a definição do banco de dados são correspondentes:

As seguintes restrições aplicam-se ao uso de procedimentos armazenados:

Criando um Procedimento Armazenado no ESQL

Ao definir um procedimento ESQL que corresponda a um procedimento armazenado do banco de dados, você pode especificar um nome qualificado (em que o qualificador é um esquema de banco de dados) ou um nome não qualificado.

Para criar um procedimento armazenado:

  1. Codifique uma instrução semelhante a esse exemplo para criar um procedimento não qualificado:
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    O EXTERNAL NAME especificado deve corresponder à definição criada no banco de dados, mas é possível especificar qualquer nome escolhido para o procedimento ESQL correspondente.

  2. Codifique uma instrução semelhante a esse exemplo para criar um procedimento qualificado:
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. Codifique uma instrução semelhante a esse exemplo para criar um procedimento qualificado em um pacote Oracle:
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL
                     NAME "mySchema.myPackage.myProc";
Para obter exemplos das definições do procedimento armazenado no banco de dados, consulte Instrução CREATE PROCEDURE.

Chamando um Procedimento Armazenado

  1. Codifique uma instrução semelhante a este exemplo para chamar um procedimento não-qualificado:
    CALL myProc1('HelloWorld');

    Como não está definido explicitamente como pertencente a qualquer esquema, o procedimento myProc1 deve existir no esquema padrão (o nome do qual é o nome do usuário utilizado para conectar-se à origem de dados) ou o comando falhará.

  2. O exemplo a seguir chama o procedimento myProc no esquema Schema1.
    CALL myProc2('HelloWorld');
  3. Codifique uma instrução semelhante a este exemplo para chamar um procedimento não qualificado com um esquema dinâmico:
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    A declaração chama o procedimento myProc1 no banco de dados Schema2, substuindo o esquema de "nome de usuário" padrão.

Chamando um Procedimento Armazenado que Retorna Dois Conjuntos de Resultados

Para chamar um procedimento armazenado que utiliza um parâmetro de entrada e retorna um parâmetro de saída e dois conjuntos de resultados:
  1. Defina o procedimento com uma instrução CREATE PROCEDURE que especifica um parâmetro de entrada, um parâmetro de saída e dois conjuntos de resultados:
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      	DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. Para chamar o procedimento myProc1 utilizando uma referência de campo, codifique:
    /* utilizando uma referência de campo */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[],
                OutputRoot.XML.Test.ResultSet2[]);
  3. Para chamar o procedimento myProc1 utilizando uma variável de referência, codifique:
    /* utilizando uma variável de referência*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[],
                         cursor.ResultSet2[]);
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac17040_