Prezados,
Estamos com uma tela com uma pouco mais de mil registros e quando esta é selecionada ela traz todos os registros para a tela, deixando-a imensa.
eu quero paginá-la para a cada 100 registros ela ir pra outra página.
Alguém sabe como?
Espero noticas
Paginação
-
- Moderador
- Mensagens: 53
- Registrado em: Seg, 12 Jul 2004 11:24 am
- Localização: Salvador
Atenciosamente,
Eduardo Santana
"Viva o dia de hoje como se fosse amanhã, por isso, não perca as oportunidades...."
Eduardo Santana
"Viva o dia de hoje como se fosse amanhã, por isso, não perca as oportunidades...."
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Bem, tem uma forma que eu não sei se é a melhor...
Veja:
Esse exemplo vai pegar a pagina 3, quebrando de 10 em 10.
Veja:
select b.campo
from
(
select rownum seq, a.*
from
(select 'numero '||rownum campo --> este é o SQL que você pode mduar.
from all_tables
) a
order by a.campo
) b
where b.seq>= ( 3 * 10 ) - 10
and b.seq< 3 * 10
/
- tfg
- Rank: Analista Júnior
- Mensagens: 83
- Registrado em: Seg, 03 Mai 2004 3:38 pm
- Localização: Novo Hamburgo - RS
O Thomas Kyte deu a seguinte dica sobre paginação:
http://asktom.oracle.com/pls/ask/f?p=49 ... 7412348064
Exemplo:
http://asktom.oracle.com/pls/ask/f?p=49 ... 7412348064
select *
from ( select a.*, rownum rnum
from ( SEU_SQL_VAI_AQUI -- com order by ) a
where rownum <= MAX_ROWS )
where rnum >= MIN_ROWS
/
select *
from ( select a.*, rownum rnum
from
(select 'numero '||rownum campo
from all_tables
) a
where rownum <= 30 )
where rnum >= 10
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Seg, 09 Ago 2010 3:14 pm
- Localização: rio de janeiro - RJ
Tenho uma paginação, mas está dentro de um cursor e não funciona de jeito nenhum com a dica acima.
O script da procedure com erro e do package referenciado por ela seguem abaixo.
Agora o codigo do Package:
alguém pode ajudar?
O script da procedure com erro e do package referenciado por ela seguem abaixo.
create or replace
PROCEDURE SUPPSEARCH (
v_cursor IN OUT PKG_PORTAL.RCT1 ,
v_dateNow IN VARCHAR2,
v_country IN VARCHAR2,
v_city IN VARCHAR2,
v_praticeField IN NUMBER,
v_title IN VARCHAR2,
v_currentPage IN INTEGER ,
v_pageSize IN INTEGER ,
v_status IN VARCHAR2
)
AS
BEGIN
OPEN v_cursor FOR
SELECT *
FROM ( SELECT topn.*, ROWNUM rnum FROM (
SELECT
S.SUPPID,S.PRAREAID,S.SUPPDATENOW,S.SUPPSTATUS,suppDateNow,P.counNamePT AS suppCountry,PR.prareaTitle
FROM
Supplier S
inner join
country p
on p.counId = s.counId
inner join
pracarea pr
on s.prareaId = pr.prareaId
where
TO_CHAR( s.suppDateNow, 'DD/MM/YYYY' ) = NVL( v_dateNow, TO_CHAR( s.suppDateNow, 'DD/MM/YYYY' ) )
and
S.counId = NVL( v_country, S.counId )
and
S.suppCity LIKE '%' || v_city || '%'
and
S.prareaId = NVL( v_praticeField, S.prareaId )
and
S.suppStatus = NVL(v_status,s.suppStatus)
order by S.SUPPID;
) topn where ROWNUM <= ( ( ( v_currentPage + 1 ) * v_pageSize ) ) ) where rnum >= ( v_currentPage * v_pageSize );
END;
Agora o codigo do Package:
create or replace PACKAGE PKG_PORTAL
AS
TYPE RCT1 IS REF CURSOR ;
TRANCOUNT INTEGER := 0 ;
IDENTITY INTEGER ;
END ;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Qual o erro que esta aparecendo??
Obs: sempre que for postar código utilize a tag code dae fica mais facil para todo mundo ler
ex:
Obs: sempre que for postar código utilize a tag code dae fica mais facil para todo mundo ler
ex:
teste
Em uma lista de discussão um usuário fez esta mesma pergunta a poucos dias, segue a resposta do Chiappa:
A técnica básica é algo do tipo :
Em http://asktom.oracle.com/pls/apex/f?p=1 ... 0346816567 se discute alguns pontos de performance, mas para apenas 350k linhas num hardware de produção dificilmente você deve ter qualquer issue...select * from ( select /*+ FIRST_ROWS(n) */ a.*, ROWNUM rnum from ( aqui entra a sua SELECT com order by ) a where ROWNUM <= :num_da_ultima_linha ) where rnum >= :num_da_primeira_linha;
[]s
Chiappa
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Seg, 09 Ago 2010 3:14 pm
- Localização: rio de janeiro - RJ
O erro que apresenta é o seguinte:
Error(22,1): PL/SQL: SQL Statement ignored
Error(23,22): PL/SQL: ORA-00918: column ambiguously defined
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Seg, 09 Ago 2010 3:14 pm
- Localização: rio de janeiro - RJ
O erro é nessa linha
SELECT *
FROM ( SELECT topn.*, ROWNUM rnum FROM (
SELECT
Error(18,1): PL/SQL: SQL Statement ignored
Error(19,22): PL/SQL: ORA-00918: column ambiguously defined
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Este erro quer dizer que o oracle não sabe de qual tabela ele deve buscar o valor.
Você precisa definir em que tabela quer buscar o rownum.
Acredito que isso deva resolver :
lembrando que neste exemplo eu busco o rownum da topn
Você precisa definir em que tabela quer buscar o rownum.
Acredito que isso deva resolver :
SELECT *
FROM ( SELECT topn.*, topn.ROWNUM rnum FROM (
SELECT
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Seg, 09 Ago 2010 3:14 pm
- Localização: rio de janeiro - RJ
Rogenaro muito obrigado.
Na query mais interna havia a mesma coluna duas vezes na query.
Tinha suprimido isso quando postei o código porque são muuuuuitas colunas.
por isso não estava no código.
Mas seu post me fez pensar e conferir.
Na query mais interna havia a mesma coluna duas vezes na query.
Tinha suprimido isso quando postei o código porque são muuuuuitas colunas.
por isso não estava no código.
Mas seu post me fez pensar e conferir.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes