[firebase-br] RES: RES: Select para Ordenar

Mazzola valdemar.salviato em sbctrans.com.br
Qua Out 14 11:48:02 -03 2009


Ola Daniel, eu tenho realmente a necessidade de popular a outra tabela,
porque eu seleciono somente alguns registros para fins de relatório e um
histórico...eu estava procurando e achei algo assim, no final da procedure
dar um EXECUTE STATEMENT:

CREATE PROCEDURE INSERE_ATRASADOS_IMPRIMIR (
    E_CHAPA INTEGER,
    E_DATA DATE,
    E_DATA_SAIDA DATE)
RETURNS (
    QTDE_DIA INTEGER,
    CHAPA INTEGER,
    LINHA NUMERIC(3,2),
    CARRO INTEGER,
    DATA DATE,
    INCIO TIME,
    FINAL TIME,
    TOTAL_HORA TIME,
    TOTAL_HORA_DEC INTEGER,
    TOTAL_HORA_REAL NUMERIC(3,2),
    NR_SEMANA INTEGER,
    SEMANA_FO INTEGER,
    PAGO VARCHAR(2))
AS
DECLARE VARIABLE I_SQL VARCHAR(255);
BEGIN
     FOR
        SELECT
QTDE_DIA,CHAPA,LINHA,CARRO,DATA,INCIO,FINAL,TOTAL_HORA,TOTAL_HORA_DEC,TOTAL_
HORA_REAL,NR_SEMANA,SEMANA_FO,PAGO FROM VW_IMPRIMI_GERAL
        WHERE CHAPA = :E_CHAPA AND DATA BETWEEN :E_DATA AND :E_DATA_SAIDA
        ORDER BY DATA,INCIO
        INTO
:QTDE_DIA,:CHAPA,:LINHA,:CARRO,:DATA,:INCIO,:FINAL,:TOTAL_HORA,:TOTAL_HORA_D
EC,:TOTAL_HORA_REAL,:NR_SEMANA,:SEMANA_FO,:PAGO
     DO
           IF (NOT EXISTS(SELECT QTDE_DIA,CHAPA,LINHA,CARRO,DATA FROM
FOMINHA_SEM_REGISTRO_IMPRIME
               WHERE QTDE_DIA =:QTDE_DIA AND CHAPA = :CHAPA AND LINHA =
:LINHA AND CARRO = :CARRO AND DATA = :DATA )) THEN
                 BEGIN
                     INSERT INTO
FOMINHA_SEM_REGISTRO_IMPRIME(QTDE_DIA,CHAPA,LINHA,CARRO,DATA,INCIO,FINAL,TOT
AL_HORA,TOTAL_HORA_DEC,TOTAL_HORA_REAL,NR_SEMANA,SEMANA_FO,PAGO)
 
VALUES(:QTDE_DIA,:CHAPA,:LINHA,:CARRO,:DATA,:INCIO,:FINAL,:TOTAL_HORA,:TOTAL
_HORA_DEC,:TOTAL_HORA_REAL,:NR_SEMANA,:SEMANA_FO,:PAGO);
                 END
           I_SQL =   'SELECT
QTDE_DIA,CHAPA,LINHA,CARRO,DATA,INCIO,FINAL,TOTAL_HORA,TOTAL_HORA_DEC,TOTAL_
HORA_REAL,'||
                     'NR_SEMANA,SEMANA_FO,PAGO FROM
FOMINHA_SEM_REGISTRO_IMPRIME'||
                     'ORDER BY DATA,INCIO';
          FOR
          EXECUTE STATEMENT I_SQL
          INTO
:QTDE_DIA,:CHAPA,:LINHA,:CARRO,:DATA,:INCIO,:FINAL,:TOTAL_HORA,:TOTAL_HORA_D
EC,:TOTAL_HORA_REAL,:NR_SEMANA,:SEMANA_FO,:PAGO
          DO 
   SUSPEND;
END

Só que ele da este erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 159.
BY.

Desde Já Agradeço sua Atenção Amigo!!!





-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Daniel (Vipa)
Enviada em: quarta-feira, 14 de outubro de 2009 10:39
Para: 'FireBase'
Assunto: [firebase-br] RES: Select para Ordenar

Bom Dia Valdemar!

Para que possamos lhe ajudar da melhor maneira possível, vc poderia
esclarecer algumas dúvidas:

1 - Qual o objetivo da Procedure, uma vez que pelo que analisei os dados já
estão dispostos na View 'VW_IMPRIMI_GERAL'?
2 - Existe realmente a necessidade de popular a tabela
'FOMINHA_SEM_REGISTRO_IMPRIMIE', porque senão uma 'SELECTED PROCEDURE'
resolve o seu problema ou até mesmo uma select na View citada acima Tb
resolve.
3 - se possível poste a procedure completa (parâmetros de entrada, saída e
variáveis de memória).

Caso o objetivo seja popular a tabela 'FOMINHA_SEM_REGISTRO_IMPRIME', tente
da seguinte forma:


--------------------
BEGIN

     FOR

        SELECT
QTDE_DIA,CHAPA,LINHA,CARRO,DATA,INCIO,FINAL,TOTAL_HORA,TOTAL_HORA_DEC,TOTAL_
HORA_REAL,NR_SEMANA,SEMANA_FO,PAGO FROM VW_IMPRIMI_GERAL

        WHERE CHAPA = :E_CHAPA AND DATA BETWEEN :E_DATA AND :E_DATA_SAIDA

        INTO
:QTDE_DIA,:CHAPA,:LINHA,:CARRO,:DATA,:INCIO,:FINAL,:TOTAL_HORA,:TOTAL_HORA_D
EC,:TOTAL_HORA_REAL,:NR_SEMANA,:SEMANA_FO,:PAGO

     DO

           IF (NOT EXISTS(SELECT QTDE_DIA,CHAPA,LINHA,CARRO,DATA FROM
FOMINHA_SEM_REGISTRO_IMPRIME

               WHERE QTDE_DIA =:QTDE_DIA AND CHAPA = :CHAPA AND LINHA =
:LINHA AND CARRO = :CARRO AND DATA = :DATA )) THEN

                 BEGIN

                     INSERT INTO
FOMINHA_SEM_REGISTRO_IMPRIME(QTDE_DIA,CHAPA,LINHA,CARRO,DATA,INCIO,FINAL,TOT
AL_HORA,TOTAL_HORA_DEC,TOTAL_HORA_REAL,NR_SEMANA,SEMANA_FO,PAGO)

 
VALUES(:QTDE_DIA,:CHAPA,:LINHA,:CARRO,:DATA,:INCIO,:FINAL,:TOTAL_HORA,:TOTAL
_HORA_DEC,:TOTAL_HORA_REAL,:NR_SEMANA,:SEMANA_FO,:PAGO);

                 END


   SUSPEND;

END

------------------------
Crie a procedure;
Execute a procedure;
Execute um commit na transação (caso esteja executando através do IBExpert)

Após, execute um select na tabela 'FOMINHA_SEM_REGISTRO_IMPRIME' com os
filtros e ordenações que desejar.


Caso esta alteração na sua procedure tenha solucionado, não precisa nem
responder às dúvidas acima.

Espero ter ajudado,

Daniel M.Pavan
Analista de Sistemas








Mais detalhes sobre a lista de discussão lista