Dvida com query e campo multi record.

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
sergio.areas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Seg, 15 Mar 2010 9:12 pm
Localização: Rio de Janeiro
Contato:
Vergonha não é o não saber e sim não procurar uma solução

Olá boa tarde a todos, tenho uma duvida.
Tenho algumas duvidas bem basicas mesmo, procurei no forum em outros tópicos e não encontrei.

Tenho um formulario onde existe um campo multi record com uma checkbox para cada item, para trabalhar com esses eu uso um loop e recupero na os dados referentes. existe outra maneira mais otimizada sem ser com loop?

Tambem no mesmo forms ao precionar um button ele dispara um evento onde faz uma consulta no banco que retorna varias linhas, pega esse resultado e faz um insert em outra tabela. já tentei usar cursor loop mas não consegui fazer a danada funcionar.
alguém pode me dar uma luz?
Se alguém souber fazer como cursor e puder dar um exemplo ficarei grato. :wink:


trecho do Código
-------------------------------------------------------------------------


-- Select de questões aleatorias
FOR REG IN (select id_questao from ( select q.id_questao id_questao
from questao q, assunto a
where q.id_assunto = a.id_assunto
and q.ind_nivel = 1
and q.id_assunto = 1
order by dbms_random.value )
where rownum <= 2 ) LOOP

insert into PROVA_QUESTAO ( ID_PROVA_QUESTAO, ID_PROVA, ID_QUESTAO)
values (SEQ_PROVA_QUESTAO.nextval, 33, REG.ID_QUESTAO);
commit;

NEXT_RECORD;
END LOOP;
DavidSilva
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Ter, 05 Out 2010 12:03 pm
Localização: Blumenau-SC
"Utrapassar os limites, apenas isso!"

Você pode fazer o seguinte. Com base em seu cursor, vai lá e cria um e com base nas informações ele atualiza a sua tabela PROVA_QUESTAO. É necessário garantir que o cursor vai retornar mais de 1 registro para isso. Segue abaixo um exemplo:

Selecionar tudo

CURSOR CR_0001 IS 
	  SELECT ID_QUESTAO 
	    FROM (SELECT Q.ID_QUESTAO ID_QUESTAO 
 		         FROM QUESTAO Q, ASSUNTO A 
		        WHERE Q.ID_ASSUNTO = A.ID_ASSUNTO 
		          AND Q.IND_NIVEL = 1 
		          AND Q.ID_ASSUNTO = 1 
		        ORDER BY DBMS_RANDOM.VALUE ) 
 	  WHERE ROWNUM <= 2;
	RW_0001%CR_0001ROWTYPE;

BEGIN
    OPEN CR_0001;
    LOOP
 	      FETCH CR_0001
   	     INTO RW_0001;
        EXIT WHEN CR_0001%NOTFOUND;
        INSERT INTO PROVA_QUESTAO ( ID_PROVA_QUESTAO, ID_PROVA, 			ID_QUESTAO) 
        VALUES (SEQ_PROVA_QUESTAO.NEXTVAL, 33, RW_0001.ID_QUESTAO);
	  END LOOP;
    CLOSE CR_0001;
END;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes