[firebase-br] Store Procedure - Parametros na Select

RAMJ SISTEMAS & CONSULTORIA jubrovolski em yahoo.com.br
Dom Mar 6 10:52:12 -03 2005


Olá Pessoal

Já consegui resolver o problema. Esqueci de olhar no livro do Cantu. 
Usei "EXECUTE STATEMENT" e resolveu meus problemas.

Reuber

RAMJ SISTEMAS & CONSULTORIA escreveu:

> Olá Pessoal
>
> Implementei a seguinte SP em meus sistemas para gerar uma sequencia 
> para os campos e guardos os registro não usados ( SuperSequenciador - 
> matéira da Clube Delphi ). Porém como sou novato no assunto, estou 
> apanhando um pouco para complementar o código. Gostaria que na 
> sequencia entre ****** eu pudesse executar o seguinte: se ao acessar a 
> primeira vez ele não achar nada na tabela sequenciador, ele 
> verificasse se já houve registros dentro da tabela. Assim retornar o 
> valor máximo do ID e somar mais 1. Porém não estou conseguindo passar 
> os parametros :TABELA e :CAMPO para o Select. Quem puder me ajudar.
>
>
> SET TERM ^ ;
>
> CREATE PROCEDURE PRC_SEQUENCIADORA (
>    TABELA CHAR(50),
>    CAMPO CHAR(20),
>    PENDENCIA INTEGER,
>    VALORATUAL CHAR(10))
> RETURNS (
>    ID_RETORNO INTEGER)
> AS
> DECLARE VARIABLE MAXID INTEGER;
> DECLARE VARIABLE ID_SEQUENCIA INTEGER;
> BEGIN
>  ID_SEQUENCIA = 0;
>  /* Inclui uma Nova Pendencia na Tabela de Pendencias */
>  if (Pendencia = 1) then
>    begin
>      INSERT INTO SEQUENCIADOR_PENDENCIAS
>      VALUES(:TABELA ,:CAMPO ,:VALORATUAL);
>          SUSPEND;
>      exit;
>    end
>
>  if (exists(SELECT PENDENCIA_VALOR
>             FROM SEQUENCIADOR_PENDENCIAS
>             WHERE SEQUENCIA_TABELA = :TABELA
>             AND SEQUENCIA_CAMPO    = :CAMPO)) then
>    begin
>      FOR SELECT PENDENCIA_VALOR
>      FROM SEQUENCIADOR_PENDENCIAS
>      WHERE SEQUENCIA_TABELA = :TABELA
>      AND SEQUENCIA_CAMPO = :CAMPO
>      ORDER BY PENDENCIA_VALOR DESC
>      INTO :ID_SEQUENCIA DO
>        BEGIN
>          ID_RETORNO = :ID_SEQUENCIA;
>        END
>    end
>  else
>    ID_SEQUENCIA = 0;
>
>  if (ID_SEQUENCIA <> 0) then
>    begin
>      ID_RETORNO = :ID_SEQUENCIA;
>      DELETE FROM SEQUENCIADOR_PENDENCIAS
>      WHERE SEQUENCIA_TABELA = :TABELA
>      AND SEQUENCIA_CAMPO    = :CAMPO
>      AND PENDENCIA_VALOR    = :ID_SEQUENCIA;
>
>      SUSPEND;
>      exit;
>    end
>  else
>    begin
>        if (not(exists(SELECT SEQUENCIA_VALOR
>         FROM SEQUENCIADOR
>         WHERE SEQUENCIA_TABELA = :TABELA
>         AND SEQUENCIA_CAMPO    = :CAMPO))) then
>        begin
> *************************
>          // se houver registros na tabela
>          if (exists(select max(:CAMPO) from :tabela into maxid)) then
>             begin
>             INSERT INTO SEQUENCIADOR VALUES(:TABELA , :CAMPO , :maxid+2);
>             ID_RETORNO = :maxid+1;
>             end
>          else // se nao houver registros
>             begin
>             INSERT INTO SEQUENCIADOR VALUES(:TABELA , :CAMPO , 2);
>             ID_RETORNO = 1;
>             end
> ********************
>        end
>      else
>        begin
>          SELECT SEQUENCIA_VALOR
>          FROM SEQUENCIADOR
>          WHERE SEQUENCIA_TABELA = :TABELA
>          AND SEQUENCIA_CAMPO    = :CAMPO
>          INTO :ID_SEQUENCIA;
>
>          UPDATE SEQUENCIADOR
>          SET SEQUENCIA_VALOR = SEQUENCIA_VALOR + 1
>          WHERE SEQUENCIA_TABELA = :TABELA
>          AND SEQUENCIA_CAMPO    = :CAMPO;
>
>          ID_RETORNO = :ID_SEQUENCIA;
>        end
>          end
>   SUSPEND;
> END
> ^
>
> SET TERM ; ^
>
> GRANT SELECT,INSERT,DELETE ON SEQUENCIADOR_PENDENCIAS TO PROCEDURE 
> PRC_SEQUENCIADORA;
>
> GRANT EXECUTE ON PROCEDURE PRC_SEQUENCIADORA TO SYSDBA;
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>








Mais detalhes sobre a lista de discussão lista