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.

Procedimentos sobrecarregados não são suportados. (Um procedimento sobrecarregado é aquele que possui o mesmo nome de outro procedimento no mesmo esquema de banco de dados com um número diferente de parâmetros ou parâmetros com tipos diferentes.) Se outro intermediário detectar que um procedimento foi sobrecarregado, ele lançará uma exceção.

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:

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'};

    Isso chama o procedimento myProc1 no banco de dados Schema2, substituindo o esquema "username" 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, 2005 Última Atualização: 04/11/2005
ac17040_