[firebase-br] RES: RES: RES: Select para Ordenar
Daniel (Vipa)
daniel em vipa.com.br
Qua Out 14 13:58:11 -03 2009
Olá Valdemar!
Do jeito que vc quer não vai dar mesmo.
Deixe a Procedure para popular a tabela e depois dê um select conforme havia
dito.
Dê uma olhada tb sobre como funcionam as Selected-procedures, pq muitas
vezes elas são a solução para que você não necessite popular outras tabelas
para geração de relatórios.
Abraços,
Daniel
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Mazzola
Enviada em: quarta-feira, 14 de outubro de 2009 11:48
Para: 'FireBase'
Assunto: [firebase-br] RES: RES: Select para Ordenar
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
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista