ola pessoal criei um form onde irei consultar os produtos cadastrados no entervalo de datas que eu informar..
usei o seguinte codigo pra fazer esta consulta pra mim porem ele da um erro de trigger levantou exceção:
SELECT PRO_ID, PRO_DESCR, PRO_DTCAD INTO :BLK_PRODUTOS.PRO_ID,
:BLK_PRODUTOS.PRO_DESCR, :BLK_PRODUTOS.PRO_DTCAD FROM PRODUTOS
WHERE PRO_DTCAD BETWEEN :BLK_PRODUTOS.TXT_DTINI AND :BLK_PRODUTOS.TXT_DTFIN;
Ok , mas a sua consulta continua trazendo varios linhas e tentando inserir no mesmo registro.
Você pode ate ter uma grade, mas esta tentando inserir os resultados da query todos em uma linha da grade apenas.
Não é possivel você fazer este teu datablock ser base table, buscando estes teus produtos?
É bem mais facil do que tentar fazer este select.
Mas se não for possivel, eu tentaria:
- fazer um select row(count) da tabela para saber quantos produtos você tem, os quais se encaixam na sua query.
- ordernar esta tua atual query pelo prod_id.
- criar um contador
- restringir a query pelo rownum, onde o rownum seria igual ao seu contador
- colocar tudo isso dentro de um loop o qual executaria até o contador ser maior que o resultado do select rowcount
- e dentro do loop colocar um next_record (ou um create_record, não estou certo qual dos dois).
Se não conseguir fazer isto, poste suas duvidas no forum, para podermos solucionar.
DECLARE
CURSOR C_QUANT_PRODUTOS IS
SELECT ROWCOUNT
FROM PRODUTOS
WHERE PRO_DTCAD BETWEEN :BLK_PRODUTOS.TXT_DTINI AND :BLK_PRODUTOS.TXT_DTFIN;
CURSOR C_PROD (LINHA NUMBER) IS
SELECT PRO_ID, PRO_DESCR, PRO_DTCAD
FROM PRODUTOS
WHERE PRO_DTCAD BETWEEN :BLK_PRODUTOS.TXT_DTINI
AND :BLK_PRODUTOS.TXT_DTFIN
AND ROWNUM = LINHA
ORDER BY PROD_ID;
R_PROD_QUANT NUMBER(7);
R_PROD C_PROD%ROWTYPE;
V_CONT NUMBER(5);
BEGIN
OPEN C_PROD_QUANT;
FETCH C_PROD_QUANT INTO R_PROD_QUANT;
CLOSE C_PROD_QUANT;
V_CONT := 0;
LOOP
V_CONT := V_CONT+1;
IF V_CONT > R_PROD_QUANT THEN
EXIT;
END IF;
OPEN C_PROD(V_CONT);
FETCH C_PROD INTO R_PROD;
CLOSE C_PROD;
:BLK_PRODUTOS.PRO_ID := R_PROD.PROD_ID;
:BLK_PRODUTOS.PRO_DESCR := R_PROD.PROD_DESCR;
:BLK_PRODUTOS.PRO_DTCAD := R_PROD.PRO_DTCAD;
END LOOP;
END;
bom o meu form tem o campo data inicial = blk_produtos.txt_dtini
e data final = blk_produtos.txtdtfin e tem um bloco e mais tres campos de forma tubular que vai ser preenchido com o resultado da pesquisa ...
eu quero que isso ocorra quando eu precionar a tecla enter no campo data final entendeu....num sei se isso ajuda !