DB2 - Banco de dados - Instruções e Funções Básicas - CALL


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

CALL

Para executar um procedimento armazenado a partir de uma sessão do QMF, é necessário emitir uma instrução CALL a partir do painel SQL Query.
O banco de dados para o qual a instrução CALL é direcionada deve suportar a habilidade de chamar um procedimento armazenado.

Após digitar a instrução CALL, um comando RUN é emitido para executar o procedimento armazenado.

                           (1)    (2)                       
   >>-CALL--procedure_name----(------+---------------+--)------><
                                     |           (3) |      
                                     +-&variável-----+      
                                     |          (4)  |      
                                     +-CONSTANT------+      
                                     |      (5)      |      
                                     '-NULL----------'      

Notas:

  1. Isso identifica o procedimento armazenado a ser chamado.
  2. Os valores de parâmetros podem ser in, out ou inout.
  3. Isto identifica uma variável de substituição QMF a ser usada como entrada ou saída para o procedimento armazenado.
  4. Isso identifica uma CONSTANT a ser usada como entrada ou saída no procedimento armazenado.
  5. O parâmetro é um valor NULL.
    O parâmetro correspondente de um procedimento armazenado deve ser definido como IN e a descrição do procedimento armazenado deve permitir os parâmetros NULL.

A instrução CALL deve ser usada sozinha em uma consulta SQL. Não é possível combiná-la com outras instruções.

Como os Parâmetros São Utilizados

QMF suporta até 63 parâmetros na instrução CALL.
Os parâmetros na instrução CALL são usados da seguinte maneira:

  • Parâmetros de entrada (IN).

    Valores de entrada transmitidos para o procedimento armazenado.

  • Parâmetros de saída (OUT).

    Os nomes da variáveis de substituição definidas pelo usuário do QMF recebem os valores das variáveis de saída retornados do procedimento armazenado.
    Antes de usar a instrução CALL, estes nomes devem ser configurados pelo usuário com o comando SET GLOBAL do QMF.

    Você deverá usar uma variável global do QMF para especificar os parâmetros de saída para um procedimento armazenado, se desejar visualizar a saída.
    Os parâmetros de saída podem então ser exibidos com o uso do comando SHOW GLOBALS.
    Um máximo de dez variáveis globais do QMF pode ser inserido a partir do painel SQL Query.
    O tamanho máximo de uma variável de substituição do QMF é de 32 KB.

    A instrução CALL falha quando os parâmetros OUT definidos para o procedimento armazenado não são inicializados corretamente.
    As variáveis globais do QMF cujos valores são copiados nos parâmetros de saída para o procedimento armazenado possuem requisitos de inicialização especiais:

    • Um parâmetro de saída com um tipo de dados numéricos deve ser inicializado com 0.
    • Um parâmetro de saída com um tipo de dado de CHAR deve ser inicializado com em branco ou NULL.
  • Parâmetros de entrada/saída (INOUT)

    Podem ser usados como entrada ou saída e podem ter o comportamento dos ou parâmetros de entrada ou de saída.

Diretrizes para a Utilização da Instrução CALL

  • Instruções CALL no QMF podem ser direcionadas somente para bancos de dados DB2 for z/OS.
  • O QMF não processa nomes de três partes referenciados em instruções CALL.
    Apenas os procedimentos armazenados na localização atual (à qual o QMF estiver conectado) são executados.
    Se um nome de três partes for inserido, o QMF o aceitará, mas uma mensagem de erro será emitida se a localização inserida não corresponder à localização atual.
  • Se um nome do esquema não for fornecido para o nome do procedimento armazenado, o QMF usará o valor do registro CURRENT SQLID como o nome do esquema.
  • A verificação de autorização é feita pelo banco de dados.
    O SQLID atual deve ser autorizado a executar o procedimento armazenado especificado na instrução CALL.
  • Parâmetros definidos com os tipos de dados DATE, TIME, TIMESTAMP ou TIMESTAMP WITH TIME ZONE devem ter seus valores delimitados entre aspas simples.
    O QMF trata estes tipos de dados como sequências de caracteres.
  • Os dados dos tipos de dados a seguir não pode ser transmitidos em um parâmetro na instrução CALL:
    BINARY, VARBINARY, VARGRAPHIC, GRAPHIC, LONG VARGRAPHIC, CLOB, BLOB, DBCLOB, ROWID e XML. Dados DECFLOAT poderão ser transmitidos, se o processador no qual o QMF está sendo executado, suportar instruções decimais de vírgula flutuante.
  • O QMF suporta o retorno dos primeiros 63 conjuntos de resultados, quando um procedimento armazenado que retorna conjuntos de resultados é executado.
    Selecione um, definindo a variável global DSQEC_SP_RS_NUM.
  • O tamanho máximo dos dados de uma coluna LOB, que deve ser retornada a partir de um procedimento armazenado, é determinado pela variável global DSQEC_LOB_COLMAX.

Como Gravar uma Instrução CALL com Identificadores Longos

Uma linha de consulta SQL única é limitada a 79 bytes no painel SQL Query do QMF.
Um identificador que abrange mais de uma linha em uma instrução CALL inserida no painel SQL Query deve ser um identificador delimitado.
Aqui estão alguns exemplos que mostram como codificar instruções CALL:

  • Um parâmetro longo como um identificador delimitado que se estende por mais de uma linha:
            CALL USERID.PROC (’THIS IS THE FIRST PARM’, 4, 1954, "THIS IS ANOTHER  
            PARÂMETRO QUE SE ESTENDERÁ POR DUAS LINHAS NESTE PAINEL", 14, 99)
  • Um nome longo de procedimento armazenado como um identificador delimitado que se expande por mais de uma linha:
            CALL USERID.’THIS_IS_A_REALLY_LONG_STORED_PROCEDURE_NAME_THAT_EXCEEDS_ 
            EXCEDE_MAIS_DE_UMA_LINHA_NO_PAINEL_DE_CONSULTA'  (’PARM1’, ’ ’, 0, ’PARM4’) 
  • Quebrar as linhas entre os identificadores:
            CALL  USERID.PROC ('ESTE É O PRIMEIRO PARM’, 4, 1964,
            ’ESTE É OUTRO PARÂMETRO QUE AGORA SE AJUSTARÁ NESTA LINHA’, 14, 99)
    
            CALL USERID.PROC (’THIS IS THE FIRST PARM’, 333333,
            123456789012345678901234567890, 200305,
            ’THIS IS THE LAST PARM’)
  • Utilize um delimitador (nesse caso, aspas) quando o texto exceder mais de duas linhas:
            CALL USERID.PROC ("ESTE É O PRIMEIRO PARM E ELE NÃO SÓ SE ESTENDE
            ALÉM DA PRIMEIRA LINHA, COMO TAMBÉM VAI ALÉM DA SEGUNDA LINHA PORQUE
            HÁ PALAVRAS DEMAIS PARA SE AJUSTAREM EM APENAS DUAS LINHAS").

Especificando um Formulário do QMF para Dados Retornados em um Conjunto de Resultados

Se você não especificar um formulário no comando RUN QUERY que emite a instrução CALL, um formulário padrão será criado com base no conjunto de resultados retornados.
Se o procedimento armazenado retornar mais de um conjunto de resultados, você poderá exibir um deles, especificando seu número na variável global DSQEC_SP_RS_NUM; o restante dos conjuntos de resultados serão ignorados.

Se o comando RUN QUERY que chama o procedimento armazenado incluir o parâmetro FORM, certifique-se de que o formulário especificado corresponda aos dados retornados no conjunto de resultados, ou o QMF emitirá uma mensagem de erro.
Neste caso, é possível carregar o formulário apropriado utilizando o comando DISPLAY FORM, ou modificar ou reconfigurar o formulário atual para corresponder aos dados retornados.



© Copyright IBM Corp.