[oracle_br] Re: como usar um case num select?

2008-06-05 Por tôpico rzzanatta

se eu fizer assim esta certo?

select case when campo = 20 then 1 
else 2 end as valor
from nometabela
where








--- Em oracle_br@yahoogrupos.com.br, "Pedro Henrique" <[EMAIL PROTECTED]> 
escreveu
>
> SQL> SELECT
>   2DUMMY
>   3  , CASE WHEN TO_CHAR(SYSDATE,'') = 2006 THEN 1
>   4 WHEN TO_CHAR(SYSDATE,'') = 2007 THEN (SELECT 99 
FROM DUAL)
>   5END CAMPO
>   6  FROM DUAL
>   7  /
> 
> D  CAMPO
> - --
> X 99
> 
> Att,
> 
> Pedro
> 
> 
> 
> 
> 
> 2008/6/5 rzzanatta <[EMAIL PROTECTED]>:
> 
> >   aí galera faz tempo q nao uso e ja me esqueci de como usar um 
case num
> > select, alguem aí tem uma script se uma sql com case pra fazer me
> > lembrar? obrigado.
> >
> >  
> >
> 
> 
> 
> -- 
> Pedro Henrique
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Re: como usar um case num select?

2008-06-05 Por tôpico rzzanatta
se eu fizer assim esta errado?
select * from nomeTabela 
case when campo= 1 then 0 else 2 end as campo






--- Em oracle_br@yahoogrupos.com.br, "Pedro Henrique" <[EMAIL PROTECTED]> 
escreveu
>
> SQL> SELECT
>   2DUMMY
>   3  , CASE WHEN TO_CHAR(SYSDATE,'') = 2006 THEN 1
>   4 WHEN TO_CHAR(SYSDATE,'') = 2007 THEN (SELECT 99 
FROM DUAL)
>   5END CAMPO
>   6  FROM DUAL
>   7  /
> 
> D  CAMPO
> - --
> X 99
> 
> Att,
> 
> Pedro
> 
> 
> 
> 
> 
> 2008/6/5 rzzanatta <[EMAIL PROTECTED]>:
> 
> >   aí galera faz tempo q nao uso e ja me esqueci de como usar um 
case num
> > select, alguem aí tem uma script se uma sql com case pra fazer me
> > lembrar? obrigado.
> >
> >  
> >
> 
> 
> 
> -- 
> Pedro Henrique
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] como usar um case num select?

2008-06-05 Por tôpico rzzanatta
aí galera faz tempo q nao uso e ja me esqueci de como usar um case num 
select, alguem aí tem uma script se uma sql com case pra fazer me 
lembrar? obrigado.



[oracle_br] Procedure que retorna valor

2007-06-15 Por tôpico rzzanatta
Por um acaso como faço uma procedure que retorna valor?



[oracle_br] Duvida em sql

2007-06-05 Por tôpico rzzanatta
Estou com uma duvida. Quando faço um select e me retorna um valor nulo
(nao econtrou nada), e estou pegando essa variavel e verificando se é 
nula, ele nao faz os procedimentos sendo nula.

 SELECT DATA INTO DATA_ICALEND FROM ICALENDARIOMENSAL
WHERE  CO_SERVICOMANUTENCAO = F_NUMERO AND ROWNUM =1
ORDER BY DATA desc;
 
IF DATA_ICALEND is NULL THEN
DATA_ICALEND:= DATA_BA;
END if;




[oracle_br] Re: Cursor dúvida.

2007-06-04 Por tôpico rzzanatta
Bom acho que expressei errado: tenho os registro que o cursor me 
trouxe aí, e aí ele entra no loop, só que no loop ele chama uma 
função pra retornar uma data, e se essa data vier nula, esse registro 
do cursor nao poderá ser inserido na tabela, por isso tenho que pular 
esse regstro e ir para o proximo. (é + ou - assim)

Como entao farei isso de pular um registro e ir para o proximo?


   CURSOR LISTAS IS
   SELECT .
 
   begin
   FOR REG1 IN LISTAS LOOP 
   AUX_P_DATA :=FN_ACHA_DATA_BI
(REG1.CO_SERVICOMANUTENCAO,V_DATAINI,V_DATAFIM,P_DATA);
   IF AUX_P_DATA = NULL THEN
 
   EXIT LOOP;
 
   END IF; 
 
 
   end loop;
 
   end;






--- Em oracle_br@yahoogrupos.com.br, "Rafael Alexandre Schmitt" 
<[EMAIL PROTECTED]> escreveu
>
> Teste se for diferente de null...se for diferente de null você faz 
o que precisa senão você pula para o próximo registro.
> 
> 
> FOR REG1 IN LISTAS LOOP 
> 
> IF reg1.AUX_P_DATA IS NOT NULL THEN
> 
>faça alguma coisa.
> 
> END IF; 
> 
> end loop;
> 
> Ou coloque no seu select a condição que você quer restringir.
> 
> 
> --
> Rafael Alexandre Schmitt
> [EMAIL PROTECTED]  ||  www.hbtec.com.br
> Blumenau - Santa Catarina
> 
>   - Original Message - 
>   From: rzzanatta 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Monday, June 04, 2007 3:22 PM
>   Subject: [oracle_br] Cursor dúvida.
> 
> 
>   Tenho esse curdor, só que quando entrar no loop, queria que 
quando o 
>   AUX_P_DATA FOR NULL não aconteça nada, pule para o proximo 
registro 
>   do cursor, como faço para pular para o proximo registro? 
> 
>   CURSOR LISTAS IS
>   SELECT .
> 
>   begin
>   FOR REG1 IN LISTAS LOOP 
> 
>   IF reg1.AUX_P_DATA = NULL THEN
> 
>   EXIT LOOP;
> 
>   END IF; 
> 
> 
>   end loop;
> 
>   end;
> 
> 
> 
> 
>
> 
> 
> 
--
>   Esta mensagem foi verificada pelo E-mail Protegido Terra.
>   Scan engine: McAfee VirusScan / Atualizado em 04/06/2007 / 
Versão: 5.1.00/5045
>   Proteja o seu e-mail Terra: http://mail.terra.com.br/ 
> 
> 
> 
> 
--
> 
> 
>   No virus found in this incoming message.
>   Checked by AVG Free Edition. 
>   Version: 7.5.472 / Virus Database: 269.8.7/830 - Release Date: 
3/6/2007 12:47
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Cursor dúvida.

2007-06-04 Por tôpico rzzanatta
Tenho esse curdor, só que quando entrar no loop, queria que quando o 
AUX_P_DATA FOR NULL não aconteça nada, pule para o proximo registro 
do cursor, como faço para pular para o proximo registro? 


CURSOR LISTAS IS
  SELECT .

begin
   FOR REG1 IN LISTAS LOOP  
   
   IF reg1.AUX_P_DATA = NULL THEN

   EXIT LOOP;

   END IF; 
   
   
   end loop;



end;
 



[oracle_br] Erro na procedure?

2007-06-04 Por tôpico rzzanatta
Olá, tenho essa Procedure criada no oracle, mas quando executo no 
delphi chamando ela, dá o erro "Error creating cursor handle", o que 
será que está errado, a procedure ou no delphi:


CREATE OR REPLACE procedure atualiza (P_PERIODO IN NUMBER,P_CATEGORIA 
IN NUMBER,
  V_DATAINI IN DATE, V_DATAFIM IN 
DATE ) IS
--DECLARACAO DE VARIAVEIS
  P_VALOR_LIMITE_CATEGORIA NUMBER(18,5); --VARIÁVEL QUE ARMAZENARÁ O 
VALOR LIMITE DA CATEGORIA
  P_DATA   DATE := V_DATAINI;  --VARIÁVEL 
QUE ARMAZENARÁ A DATA
  AUX_P_DATA   DATE ;
  P_AUX_VALOR_CATEGORIANUMBER(18,5):=0; --VARIÁVEL QUE SABERÁ 
QUANTO ESTÁ SENDO INSERIDO NAQUELE DIA
  p_datafimDATE := V_DATAFIM;
  CODIGO   NUMBER;
  DATA_CALEND  DATE;

--DECLARACAO DE CURSOR
CURSOR LISTAS IS
  SELECT
F.CO_MAQUINA,
DECODE(I.NU_TEMPOREAL,NULL,I.NU_TEMPOPREVISTO,
(I.NU_TEMPOREAL+I.NU_TEMPOPREVISTO)/2) AS TEMPOPREVISTO,
I.CO_PERIODO,
I.CO_FICHAPREVENTIVA,
I.CO_SERVICOMANUTENCAO,
F.NO_CATEGORIA_FICHAPREVENTIVA
  FROM
IFICHAPREVENTIVA I, FICHAPREVENTIVA F
  WHERE
F.CO_FICHAPREVENTIVA = I.CO_FICHAPREVENTIVA AND
I.CO_PERIODO = P_PERIODO AND
F.CO_CATEGORIA = P_CATEGORIA;

BEGIN
   --ACHA O VALOR MÁXIMO DA CATEGORIA
   SELECT A.NU_TEMPODIARIO INTO P_VALOR_LIMITE_CATEGORIA
FROM CATEGORIA A
WHERE A.CO_CATEGORIA = P_CATEGORIA;

   INSERT INTO calendariomensal (CO_CALENDMENSAL, CO_CATEGORIA, DATA, 
DT_ULTATUALIZA)
VALUES ( 1,P_CATEGORIA,To_Date(SYSDATE,'dd/mm/'),To_Date
(SYSDATE,'dd/mm/'));

   SELECT MAX(CO_CALENDMENSAL) INTO CODIGO
FROM CALENDARIOMENSAL;

   SELECT DATA INTO DATA_CALEND
FROM calendariomensal
WHERE CO_CALENDMENSAL= CODIGO;

   FOR REG1 IN LISTAS LOOP  --ABRE O CURSOR

   IF (REG1.TEMPOPREVISTO + P_AUX_VALOR_CATEGORIA) <= 
P_VALOR_LIMITE_CATEGORIA AND (p_data <=p_datafim) THEN
--ACHA UMA DATA VÁLIDA
AUX_P_DATA := FN_ACHA_DATA(P_DATA,P_CATEGORIA); --CHAMA A 
FUNCAO PARA ACHAR A PROXIMA DATA
P_DATA := AUX_P_DATA;

IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
   INSERT INTO ICALENDARIOMENSAL
 
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
 VALUES ( CODIGO,REG1.CO_MAQUINA, 
REG1.TEMPOPREVISTO,DATA_CALEND,REG1.CO_PERIODO,REG1.CO_FICHAPREVENTIVA
, P_DATA,REG1.CO_SERVICOMANUTENCAO);
END IF;
IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN
   INSERT INTO icalendariomensal
 
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOELETRICA,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
 VALUES ( 
codigo,REG1.CO_MAQUINA,DATA_CALEND,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,
REG1.CO_FICHAPREVENTIVA,P_DATA,REG1.CO_SERVICOMANUTENCAO);
END IF;

IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'LUBRIFICAÇÃO'  
THEN
   INSERT INTO icalendariomensal
 
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOLUBRIFICACAO,CO_FI
CHAPREVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
 VALUES 
(codigo,REG1.CO_MAQUINA,DATA_CALEND,REG1.CO_PERIODO,REG1.TEMPOPREVISTO
,REG1.CO_FICHAPREVENTIVA, P_DATA,REG1.CO_SERVICOMANUTENCAO);
END IF;

P_AUX_VALOR_CATEGORIA :=P_AUX_VALOR_CATEGORIA 
+REG1.TEMPOPREVISTO; --ATUALIZA O VALOR INSERIDO P/ O DIA

   ELSE
IF (P_DATA <= P_DATAFIM) THEN --para nao executar alem do 
período desejado
   P_AUX_VALOR_CATEGORIA :=0;--ZERA PARA O NOVO DIA
   P_DATA :=P_DATA + 1; --JOGA O VALOR PARA A DATA MAIS 
UM DIA
   AUX_P_DATA := FN_ACHA_DATA
(P_DATA,P_CATEGORIA); /*VERIFICA SE O PROXIMO DIA NAO É 
SAB/DOM/FERIADO E RETORNA O PROXIMO DIA ÚTIL*/
   P_DATA := AUX_P_DATA;/* DEVOLVE O VALOR ATUALIZADO DA 
DATA PARA SE VOLTAR AO INCIO DO LOOP ESTAR COM O ÚLTIMO VALOR*/

   IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
  INSERT INTO icalendariomensal
   
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
   VALUES ( 
codigo,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO,DATA_CALEND,REG1.CO_PERIODO,
REG1.CO_FICHAPREVENTIVA,P_DATA,REG1.CO_SERVICOMANUTENCAO);
   END IF;

   IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN
   INSERT INTO icalendariomensal
   
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOELETRICA,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
   VALUES 
(codigo,REG1.CO_MAQUINA,DATA_CALEND,REG1.CO_PERIODO,REG1.TEMPOPREVISTO
,REG1.CO_FICHAPREVENTIVA,P_DATA,REG1.CO_SERVICOMANUTENCAO);
   END IF;

   

[oracle_br] Re: Problema com procedure

2007-05-25 Por tôpico rzzanatta
Obrigado pelas dicas vou tentar..



--- Em oracle_br@yahoogrupos.com.br, "FERNANDES Marco ASOFTTEK" 
<[EMAIL PROTECTED]> escreveu
>
> Então,
> normalmente quando não entra no loop é pq não retornou linhas no 
select dele.
> Ou deu algum problema na criação do cursor (sintaxe errada, param 
errado, sei lá).
>  
> Se vc executar o select fora do cursor, numa janelinha de SQL mesmo 
ou no
> SQLPlus, mas como exatamente os mesmos paramêtros e retornar as 
linhas
> normalmente, aí vc elimina essa chance de Zero Row Returned !
>  
> Outra dica e essa é importantíssima  nunca use ou só em último 
caso a sintaxe:
> exception
>   when others then
> null;
> end;
>  
> Isso é a morte em pessoa  qualquer erro que ocorrer vc não 
ficará sabendo o que
> foi e nem nada !!! inclusive o erro do seu cursor não aparece por 
causa disso !
> Eu sempre uso o seguinte:
> EXCEPTION
>WHEN OTHERS THEN
>   ROLLBACK WORK ;
>   RAISE_APPLICATION_ERROR( -20001, 'ERRO NA PROCEDURE PR_.' 
|| SUBSTR(SQLERRM,1,200));
> END PR_ ;
>  
> O uso do rowcount é exatamente esse que coloquei no email anterior.
> Qdo vc dá o Open no cursor, vc carrega as linhas na memória.
> Nesse momento vc pode executar o rowcount que te mostra qtas
> linhas teu select trouxe no cursor. Ou seja, no seu caso vc criar
> uma variável tipo number na sua proc e coloca a seguinte linha logo 
após
> o open do seu cursor, assim:
> Open Listas;
> var_number := Listas%RowCount;
> 
> Bom, o uso do dbms_output eu costumo usar frases bem bestas como:
> dbms_output.put_line('passei por aqui !');
> Ou coloco os valores de variáveis e tal.
> Aí, após a execução do procedure eu verifico o output e vejo
> por onde passou e qual o valor das variáveis.
> É um procedimento bem tosco mas eu antigamente usava
> isso porque não tinha debugger ! risos
> Também dá pra usar no exception que citei acima antes do raise !
>  
> É isso... qualquer coisa dá um grito.
>  
> Abraço,
> Marco.
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br 
[mailto:[EMAIL PROTECTED] On Behalf Of PUB: rzzanatta
> Sent: sexta-feira, 25 de maio de 2007 14:41
> To: oracle_br@yahoogrupos.com.br
> Subject: [oracle_br] Re: Problema com procedure
> 
> 
> 
> Verifiquei se nao entrou no loop pois ele nao faz o que esta dentro 
> do loop, só faz as coisas fora do loop, como uso dbms_output e 
> rowcount?
> 
> --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> , "FERNANDES Marco A SOFTTEK" 
>  escreveu
> >
> > Executando o select no braço retorna as linhas normalmente ?
> > 
> > Como vc verificou que ele não entra no loop ? foi no debugger ?
> > 
> > de vez em qdo tem uns debugger que dá pau apenas de vizualização
> > no debug mas entrava normal no loop... sei lá pq !
> > 
> > As vezes eu prefiro colocar uns dbms_output pra ter certeza.
> > 
> > Ah, tbém rola um rowcount no cursor pra saber se trouxe linhas !
> > var_number := nome_do_cursor%RowCount;
> > 
> > abraço,
> > Marco.
> > 
> > 
> > 
> > 
> > From: oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br>  
> [mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> ] On Behalf Of PUB: rzzanatta
> > Sent: sexta-feira, 25 de maio de 2007 10:54
> > To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> 
> > Subject: [oracle_br] Re: Problema com procedure
> > 
> > 
> > 
> > bom, tirei o case mas tambem nao funcionou.
> > ele nao entra no loop nao sei o pq.
> > O Oracle é 9i
> > 
> > --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br>  <mailto:oracle_br%
> 40yahoogrupos.com.br> , "FERNANDES Marco A SOFTTEK" 
> >  escreveu
> > >
> > > Não tenho certeza, mas acho que há limitação no uso de CASE no 
> > cursor.
> > > Pq não tenta trocar por decode e ver no que dá ?
> > > 
> > > Seria interessante vc nos dizer a config do ambiente (versão do 
> > banco).
> > > 
> > > Abraço,
> > > Marco.
> > > 
> > > 
> > > 
> > > From: oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br>  <mailto:oracle_br%
> 40yahoogrupos.com.br> 
> > [mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br>  <mailto:oracle_br%
> 40yahoogrupos.com.br> ] On Behalf Of PUB: rzzanatta
> > > Sent: sexta-feira, 25

[oracle_br] Re: Problema com procedure

2007-05-25 Por tôpico rzzanatta
Verifiquei se nao entrou no loop pois ele nao faz o que esta dentro 
do loop, só faz as coisas fora do loop, como uso dbms_output e 
rowcount?




--- Em oracle_br@yahoogrupos.com.br, "FERNANDES Marco ASOFTTEK" 
<[EMAIL PROTECTED]> escreveu
>
> Executando o select no braço retorna as linhas normalmente ?
>  
> Como vc verificou que ele não entra no loop ? foi no debugger ?
>  
> de vez em qdo tem uns debugger que dá pau apenas de vizualização
> no debug mas entrava normal no loop... sei lá pq !
>  
> As vezes eu prefiro colocar uns dbms_output pra ter certeza.
>  
> Ah, tbém rola um rowcount no cursor pra saber se trouxe linhas !
> var_number := nome_do_cursor%RowCount;
>  
> abraço,
> Marco.
>  
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br 
[mailto:[EMAIL PROTECTED] On Behalf Of PUB: rzzanatta
> Sent: sexta-feira, 25 de maio de 2007 10:54
> To: oracle_br@yahoogrupos.com.br
> Subject: [oracle_br] Re: Problema com procedure
> 
> 
> 
> bom, tirei o case mas tambem nao funcionou.
> ele nao entra no loop nao sei o pq.
> O Oracle é 9i
> 
> --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> , "FERNANDES Marco A SOFTTEK" 
>  escreveu
> >
> > Não tenho certeza, mas acho que há limitação no uso de CASE no 
> cursor.
> > Pq não tenta trocar por decode e ver no que dá ?
> > 
> > Seria interessante vc nos dizer a config do ambiente (versão do 
> banco).
> > 
> > Abraço,
> > Marco.
> > 
> > ____
> > 
> > From: oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br>  
> [mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> ] On Behalf Of PUB: rzzanatta
> > Sent: sexta-feira, 25 de maio de 2007 09:21
> > To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%
40yahoogrupos.com.br> 
> > Subject: [oracle_br] Problema com procedure
> > 
> > 
> > 
> > Tenho essa procedure, só que ela funciona até o loop, e dentro do 
> > loop ele nao faz nada, o que será que estou fazendo de errado 
nesse 
> > loop? ou é erro no cursor? dá o erro "error creating cursor 
handle"
> > 
> > CREATE OR REPLACE procedure atualiza (P_PERIODO IN 
> > VARCHAR2,P_CATEGORIA IN NUMBER,
> > V_DATAINI IN DATE, V_DATAFIM 
> > IN DATE ) IS
> > 
> > --DECLARACAO DE CURSOR
> > CURSOR LISTAS IS
> > SELECT F.CO_MAQUINA,
> > CASE WHEN I.NU_TEMPOREAL IS null THEN I.NU_TEMPOPREVISTO 
> > ELSE (I.NU_TEMPOREAL+I.NU_TEMPOPREVISTO)/2 END TEMPOPREVISTO,
> > I.CO_PERIODO,
> > I.CO_FICHAPREVENTIVA,
> > I.CO_SERVICOMANUTENCAO,
> > F.NO_CATEGORIA_FICHAPREVENTIVA
> > FROM IFICHAPREVENTIVA I, FICHAPREVENTIVA F
> > WHERE F.CO_FICHAPREVENTIVA = I.CO_FICHAPREVENTIVA
> > AND I.CO_PERIODO = P_PERIODO
> > AND F.CO_CATEGORIA = P_CATEGORIA;
> > 
> > --DECLARACAO DE VARIAVEIS
> > P_VALOR_LIMITE_CATEGORIA NUMBER(18,5); --VARIÁVEL QUE ARMAZENARÁ 
O 
> > VALOR LIMITE DA CATEGORIA
> > P_DATA DATE := V_DATAINI; --VARIÁVEL QUE ARMAZENARÁ A DATA
> > AUX_P_DATA DATE ;
> > P_AUX_VALOR_CATEGORIA NUMBER(18,5):=0; --VARIÁVEL QUE SABERÁ 
QUANTO 
> > ESTÁ SENDO INSERIDO NAQUELE DIA
> > p_datafim DATE := V_DATAFIM;
> > --
> > BEGIN
> > 
> > --ACHA O VALOR MÁXIMO DA CATEGORIA
> > SELECT NU_TEMPODIARIO INTO P_VALOR_LIMITE_CATEGORIA
> > FROM categoria A
> > WHERE A.CO_CATEGORIA = P_CATEGORIA;
> > 
> > INSERT INTO calendariomensal (CO_CALENDMENSAL,CO_CATEGORIA, 
> > DATA,DT_ULTATUALIZA)
> > VALUES ( 1,P_CATEGORIA,sysdate,sysdate);
> > OPEN LISTAS;
> > --ABRE O CURSOR
> > FOR REG1 IN LISTAS LOOP
> > IF (REG1.TEMPOPREVISTO + P_AUX_VALOR_CATEGORIA) <= 
> > P_VALOR_LIMITE_CATEGORIA and (p_data <=p_datafim) THEN
> > 
> > --ACHA UMA DATA VÁLIDA
> > AUX_P_DATA := FN_ACHA_DATA(P_DATA,P_CATEGORIA); --CHAMA 
> > A FUNCAO PARA ACHAR A PROXIMA DATA
> > P_DATA := AUX_P_DATA;
> > 
> > IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
> > 
> > INSERT INTO icalendariomensal
> > 
> > 
> 
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
> > REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
> > VALUES ( 1,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO, 
> > P_DATA,REG1.CO_PERIODO, 
> > REG1.CO_FICHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
> > END if;
> > 
> > IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN
> > 
> > INSERT INTO icalendariomensal
> > 
> > 
> 
(CO

[oracle_br] Re: Problema com procedure

2007-05-25 Por tôpico rzzanatta
bom, tirei o case mas tambem nao funcionou.
ele nao entra no loop nao sei o pq.
O Oracle é 9i







--- Em oracle_br@yahoogrupos.com.br, "FERNANDES Marco ASOFTTEK" 
<[EMAIL PROTECTED]> escreveu
>
> Não tenho certeza, mas acho que há limitação no uso de CASE no 
cursor.
> Pq não tenta trocar por decode e ver no que dá ?
>  
> Seria interessante vc nos dizer a config do ambiente (versão do 
banco).
>  
> Abraço,
> Marco.
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br 
[mailto:[EMAIL PROTECTED] On Behalf Of PUB: rzzanatta
> Sent: sexta-feira, 25 de maio de 2007 09:21
> To: oracle_br@yahoogrupos.com.br
> Subject: [oracle_br] Problema com procedure
> 
> 
> 
> Tenho essa procedure, só que ela funciona até o loop, e dentro do 
> loop ele nao faz nada, o que será que estou fazendo de errado nesse 
> loop? ou é erro no cursor? dá o erro "error creating cursor handle"
> 
> CREATE OR REPLACE procedure atualiza (P_PERIODO IN 
> VARCHAR2,P_CATEGORIA IN NUMBER,
> V_DATAINI IN DATE, V_DATAFIM 
> IN DATE ) IS
> 
> --DECLARACAO DE CURSOR
> CURSOR LISTAS IS
> SELECT F.CO_MAQUINA,
> CASE WHEN I.NU_TEMPOREAL IS null THEN I.NU_TEMPOPREVISTO 
> ELSE (I.NU_TEMPOREAL+I.NU_TEMPOPREVISTO)/2 END TEMPOPREVISTO,
> I.CO_PERIODO,
> I.CO_FICHAPREVENTIVA,
> I.CO_SERVICOMANUTENCAO,
> F.NO_CATEGORIA_FICHAPREVENTIVA
> FROM IFICHAPREVENTIVA I, FICHAPREVENTIVA F
> WHERE F.CO_FICHAPREVENTIVA = I.CO_FICHAPREVENTIVA
> AND I.CO_PERIODO = P_PERIODO
> AND F.CO_CATEGORIA = P_CATEGORIA;
> 
> --DECLARACAO DE VARIAVEIS
> P_VALOR_LIMITE_CATEGORIA NUMBER(18,5); --VARIÁVEL QUE ARMAZENARÁ O 
> VALOR LIMITE DA CATEGORIA
> P_DATA DATE := V_DATAINI; --VARIÁVEL QUE ARMAZENARÁ A DATA
> AUX_P_DATA DATE ;
> P_AUX_VALOR_CATEGORIA NUMBER(18,5):=0; --VARIÁVEL QUE SABERÁ QUANTO 
> ESTÁ SENDO INSERIDO NAQUELE DIA
> p_datafim DATE := V_DATAFIM;
> --
> BEGIN
> 
> --ACHA O VALOR MÁXIMO DA CATEGORIA
> SELECT NU_TEMPODIARIO INTO P_VALOR_LIMITE_CATEGORIA
> FROM categoria A
> WHERE A.CO_CATEGORIA = P_CATEGORIA;
> 
> INSERT INTO calendariomensal (CO_CALENDMENSAL,CO_CATEGORIA, 
> DATA,DT_ULTATUALIZA)
> VALUES ( 1,P_CATEGORIA,sysdate,sysdate);
> OPEN LISTAS;
> --ABRE O CURSOR
> FOR REG1 IN LISTAS LOOP
> IF (REG1.TEMPOPREVISTO + P_AUX_VALOR_CATEGORIA) <= 
> P_VALOR_LIMITE_CATEGORIA and (p_data <=p_datafim) THEN
> 
> --ACHA UMA DATA VÁLIDA
> AUX_P_DATA := FN_ACHA_DATA(P_DATA,P_CATEGORIA); --CHAMA 
> A FUNCAO PARA ACHAR A PROXIMA DATA
> P_DATA := AUX_P_DATA;
> 
> IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
> 
> INSERT INTO icalendariomensal
> 
> 
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
> REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
> VALUES ( 1,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO, 
> P_DATA,REG1.CO_PERIODO, 
> REG1.CO_FICHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
> END if;
> 
> IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN
> 
> INSERT INTO icalendariomensal
> 
> 
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOELETRICA,CO_FICHAP
> REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
> VALUES ( 
> 
1,REG1.CO_MAQUINA,P_DATA,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,REG1.CO_FI
> CHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
> END if;
> 
> IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'LUBRIFICAÇÃO' 
> THEN
> 
> INSERT INTO icalendariomensal
> 
> 
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOLUBRIFICACAO,CO_FI
> CHAPREVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
> VALUES ( 
> 
1,REG1.CO_MAQUINA,P_DATA,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,REG1.CO_FI
> CHAPREVENTIVA, sysdate,REG1.CO_SERVICOMANUTENCAO);
> END if;
> 
> P_AUX_VALOR_CATEGORIA :=P_AUX_VALOR_CATEGORIA + 
> REG1.TEMPOPREVISTO; --ATUALIZA O VALOR INSERIDO P/ O DIA
> --DEVE ATUALIZAR A TABELA DE LISTAS COM A DATA INSERIDA
> 
> ELSE
> 
> if (p_Data <= p_datafim) then --para nao executar alem do 
> período desejado
> BEGIN
> P_AUX_VALOR_CATEGORIA :=0;--ZERA PARA O NOVO DIA
> P_DATA :=P_DATA + 1; --JOGA O VALOR PARA A DATA MAIS 
> UM DIA
> AUX_P_DATA := FN_ACHA_DATA
> (P_DATA,P_CATEGORIA); /*VERIFICA SE O PROXIMO DIA NAO É 
> SAB/DOM/FERIADO E RETORNA O PROXIMO DIA ÚTIL*/
> P_DATA := AUX_P_DATA;/* DEVOLVE O VALOR ATUALIZADO DA 
> DATA PARA SE VOLTAR AO INCIO DO LOOP ESTAR COM O ÚLTIMO VALOR*/
> 
> IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
> INSERT INTO icalendariomensal
> 
> 
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
> REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
> VALUES ( 1,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO, 
> P_DATA,REG1.C

[oracle_br] Problema com procedure

2007-05-25 Por tôpico rzzanatta
Tenho essa procedure, só que ela funciona até o loop, e dentro do 
loop ele nao faz nada, o que será que estou fazendo de errado nesse 
loop? ou é erro no cursor? dá o erro "error creating cursor handle"




CREATE OR REPLACE procedure atualiza (P_PERIODO IN 
VARCHAR2,P_CATEGORIA IN NUMBER,
   V_DATAINI IN DATE, V_DATAFIM 
IN DATE ) IS

--DECLARACAO DE CURSOR
CURSOR LISTAS IS
  SELECT F.CO_MAQUINA,
 CASE WHEN I.NU_TEMPOREAL IS null THEN I.NU_TEMPOPREVISTO 
ELSE (I.NU_TEMPOREAL+I.NU_TEMPOPREVISTO)/2 END TEMPOPREVISTO,
 I.CO_PERIODO,
 I.CO_FICHAPREVENTIVA,
 I.CO_SERVICOMANUTENCAO,
 F.NO_CATEGORIA_FICHAPREVENTIVA
FROM IFICHAPREVENTIVA I, FICHAPREVENTIVA F
   WHERE F.CO_FICHAPREVENTIVA = I.CO_FICHAPREVENTIVA
 AND I.CO_PERIODO = P_PERIODO
 AND F.CO_CATEGORIA = P_CATEGORIA;

--DECLARACAO DE VARIAVEIS
P_VALOR_LIMITE_CATEGORIA  NUMBER(18,5); --VARIÁVEL QUE ARMAZENARÁ O 
VALOR LIMITE DA CATEGORIA
P_DATA  DATE := V_DATAINI;   --VARIÁVEL QUE ARMAZENARÁ A DATA
AUX_P_DATA DATE ;
P_AUX_VALOR_CATEGORIA NUMBER(18,5):=0; --VARIÁVEL QUE SABERÁ QUANTO 
ESTÁ SENDO INSERIDO NAQUELE DIA
p_datafim DATE := V_DATAFIM;
--
BEGIN


   --ACHA O VALOR MÁXIMO DA CATEGORIA
   SELECT  NU_TEMPODIARIO INTO P_VALOR_LIMITE_CATEGORIA
   FROM categoria A
   WHERE A.CO_CATEGORIA = P_CATEGORIA;

   INSERT INTO calendariomensal  (CO_CALENDMENSAL,CO_CATEGORIA, 
DATA,DT_ULTATUALIZA)
 VALUES (  1,P_CATEGORIA,sysdate,sysdate);
   OPEN LISTAS;
   --ABRE O CURSOR
   FOR REG1 IN LISTAS LOOP
   IF (REG1.TEMPOPREVISTO + P_AUX_VALOR_CATEGORIA) <= 
P_VALOR_LIMITE_CATEGORIA and (p_data <=p_datafim)  THEN
  
 --ACHA UMA DATA VÁLIDA
 AUX_P_DATA := FN_ACHA_DATA(P_DATA,P_CATEGORIA); --CHAMA 
A FUNCAO PARA ACHAR A PROXIMA DATA
 P_DATA := AUX_P_DATA;

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
  
   INSERT INTO icalendariomensal
   
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
   VALUES (  1,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO, 
P_DATA,REG1.CO_PERIODO, 
REG1.CO_FICHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
  END if;

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN
  
  INSERT INTO icalendariomensal
  
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOELETRICA,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
  VALUES (  
1,REG1.CO_MAQUINA,P_DATA,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,REG1.CO_FI
CHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
 END if;

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'LUBRIFICAÇÃO' 
THEN
 
  INSERT INTO icalendariomensal
  
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOLUBRIFICACAO,CO_FI
CHAPREVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
  VALUES (  
1,REG1.CO_MAQUINA,P_DATA,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,REG1.CO_FI
CHAPREVENTIVA, sysdate,REG1.CO_SERVICOMANUTENCAO);
 END if;

 P_AUX_VALOR_CATEGORIA :=P_AUX_VALOR_CATEGORIA + 
REG1.TEMPOPREVISTO; --ATUALIZA O VALOR INSERIDO P/ O DIA
   --DEVE ATUALIZAR A TABELA DE LISTAS COM A DATA INSERIDA

   ELSE
   
   if (p_Data <= p_datafim) then  --para nao executar alem do 
período desejado
BEGIN
  P_AUX_VALOR_CATEGORIA :=0;--ZERA PARA O NOVO DIA
  P_DATA :=P_DATA + 1;  --JOGA O VALOR PARA A DATA MAIS 
UM DIA
  AUX_P_DATA := FN_ACHA_DATA
(P_DATA,P_CATEGORIA); /*VERIFICA SE O PROXIMO DIA NAO É 
SAB/DOM/FERIADO E RETORNA O PROXIMO DIA ÚTIL*/
  P_DATA := AUX_P_DATA;/* DEVOLVE O VALOR ATUALIZADO DA 
DATA PARA SE VOLTAR AO INCIO DO LOOP ESTAR COM O ÚLTIMO VALOR*/

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'MECÂNICA' THEN
   INSERT INTO icalendariomensal
   
(CO_CALENDMENSAL,CO_MAQUINA,NU_TEMPOMECANICA,DATA,CO_PERIODO,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
   VALUES (  1,REG1.CO_MAQUINA,REG1.TEMPOPREVISTO, 
P_DATA,REG1.CO_PERIODO, 
REG1.CO_FICHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
  END if;

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'ELÉTRICA' THEN

  INSERT INTO icalendariomensal
  
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOELETRICA,CO_FICHAP
REVENTIVA,DT_ULTATUALIZA,CO_SERVICOMANUTENCAO)
  VALUES (  
1,REG1.CO_MAQUINA,P_DATA,REG1.CO_PERIODO,REG1.TEMPOPREVISTO,REG1.CO_FI
CHAPREVENTIVA,sysdate,REG1.CO_SERVICOMANUTENCAO);
 END if;

 IF REG1.NO_CATEGORIA_FICHAPREVENTIVA = 'LUBRIFICAÇÃO' 
THEN
   
  INSERT INTO icalendariomensal
  
(CO_CALENDMENSAL,CO_MAQUINA,DATA,CO_PERIODO,NU_TEMPOLUBRIFICACAO,CO_FI
CHAPREVENTIVA,DT_ULTATUALIZA,CO_SERVICO

[oracle_br] Ajuda.....

2007-05-18 Por tôpico rzzanatta
Vamos lá, eu tenho que montar um calendário dos serviços de manutenção,
cada serviço tem seu tempo defenido, cada serviço está em uma
categoria, cada categoria tem seu tempo estabelecido por dia tipo
categoria X tem 100 minutos por dia. Entao, apartir dos serviços
trazidos por uma sql , eu tenho que iserir esses dados, em uma outra
tabela, só que tenho que ir somando o tempo de cada serviço e comparar
se nao vai ultrapassar o tempo diario da categoria, e acrescentando a
data pra ser feito esse serviço. (só que eu tinha ficar verificando
esse tempo linha por linha do resultado da sql)

tipo a categoria X tem 100 min por dia, e os dois primeiros serviço já
derem 100 min, os proximos serviços serao alocados com a data do outro
dia, e assim por diante.

Bom acho que é isso. nao sei como faço isso, se uma select faz essas
coisas ou tenho que montar algum loop no delphi, ou se tenho que montar 
uma procedure no Oracle, pra ficar lendo as
linhas dos registros.
Obrigado.



[oracle_br] Re: Delphi e oracle

2007-05-15 Por tôpico rzzanatta
Valeu galera, eu coloquei um count dentro da select que ja deu certo.
obrigado.





--- Em oracle_br@yahoogrupos.com.br, Márcio Ricardo <[EMAIL PROTECTED]> 
escreveu
>
> A sua consulta deve estar errada, pois eu utilizo essa propriedade 
e ela me traz a quantidade correta...
> Posta o seu codigo aqui para analizarmos.
>   - Original Message - 
>   From: rzzanatta 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Monday, May 14, 2007 1:29 PM
>   Subject: [oracle_br] Delphi e oracle
> 
> 
>   Olá gostaria de saber como faço para que em uma consulta de 
registros, 
>   me traga a quantidade dos registros encontrados?
> 
>   pois no delphi, usando a propriedade "RecordCount" na query ele 
só me 
>   traz o numero -1.
> 
> 
> 
>
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Delphi e oracle

2007-05-14 Por tôpico rzzanatta
Olá gostaria de saber como faço para que em uma consulta de registros, 
me traga a quantidade dos registros encontrados?

pois no delphi, usando a propriedade "RecordCount" na query ele só me 
traz o numero -1.



[oracle_br] Re: Resto da divisao

2007-05-08 Por tôpico rzzanatta
Obrigado, tinha me esquecido disso.rsrsrs

Valeu

--- Em oracle_br@yahoogrupos.com.br, "Alex Fernando Kirsten" 
<[EMAIL PROTECTED]> escreveu
>
> trunc(13/2,0)
> 
> []'s
> 
> Alex Fernando Kirsten
> Oracle 9i Database Administrator Certified Professional
> Depto. de Tecnologia
> Operacional Têxtil
> 
>   - Original Message - 
>   From: rzzanatta 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Tuesday, May 08, 2007 2:20 PM
>   Subject: [oracle_br] Resto da divisao
> 
> 
>   Olá galera eu sei que pra mim pegar o resto da divisao é só fazer
>   mod(13,2) que é 1, mas como pego só a parte inteira da divisao 
que 
>   neste caso seria 2?
> 
> 
> 
>
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Resto da divisao

2007-05-08 Por tôpico rzzanatta
Olá galera eu sei que pra mim pegar o resto da divisao é só fazer
mod(13,2) que é 1, mas como pego só a parte inteira da divisao que 
neste caso seria 2?



[oracle_br] select

2007-02-28 Por tôpico rzzanatta
Olá estou com problema e nao consigo pensar direito, parece simples, 
acho.

tenho uma tabela no oracle nela tenho mensagens pra aparecer na nota 
fiscal apartir dos codigos dos produtos, ex:

codigo |  grupo  | mensagem
  01  4.3.07   ICMS RETIDO
  02  4.3.08   ICMS RETIDO
  03  4.3.01.08ISENTO
  ...
SE EU FATURAR OS PRODUTOS 4.3.07 E 4.3.08 NA MESMA NOTA EU QUERIA QUE 
APARECESSE SOMENTE UMA MENSAGEM NA NOTA, NAO DUAS.
COMO FAÇO ISSO?

MINHA SELECT É ESSA.
SELECT GRUPO FROM TESTE WHERE GRUPO IN ('4.3.01.07','4.3.01.08')

(ASSIM ELE TRAZ DOIS RESULTADOS NESSA NOTA E EU SÓ QUERO UM)