Página 1 de 1
Paginação
Enviado: Ter, 26 Out 2004 12:03 pm
por edu_oracle
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
Enviado: Ter, 26 Out 2004 1:26 pm
por dr_gori
Bem, tem uma forma que eu não sei se é a melhor...
Veja:
Selecionar tudo
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
/
Esse exemplo vai pegar a pagina 3, quebrando de 10 em 10.
Enviado: Ter, 23 Nov 2004 3:45 pm
por tfg
O Thomas Kyte deu a seguinte dica sobre paginação:
http://asktom.oracle.com/pls/ask/f?p=49 ... 7412348064
Selecionar tudo
select *
from ( select a.*, rownum rnum
from ( SEU_SQL_VAI_AQUI -- com order by ) a
where rownum <= MAX_ROWS )
where rnum >= MIN_ROWS
/
Exemplo:
Selecionar tudo
select *
from ( select a.*, rownum rnum
from
(select 'numero '||rownum campo
from all_tables
) a
where rownum <= 30 )
where rnum >= 10
Paginação com cursor
Enviado: Ter, 10 Ago 2010 2:19 pm
por caracamaneh
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.
Selecionar tudo
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:
Selecionar tudo
create or replace PACKAGE PKG_PORTAL
AS
TYPE RCT1 IS REF CURSOR ;
TRANCOUNT INTEGER := 0 ;
IDENTITY INTEGER ;
END ;
alguém pode ajudar?
Enviado: Ter, 10 Ago 2010 3:06 pm
por SergioLBJr
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:
Enviado: Ter, 10 Ago 2010 5:26 pm
por burga
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 :
Selecionar tudo
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;
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...
[]s
Chiappa
Paginação com cursor
Enviado: Qua, 11 Ago 2010 10:48 am
por caracamaneh
O erro que apresenta é o seguinte:
Selecionar tudo
Error(22,1): PL/SQL: SQL Statement ignored
Error(23,22): PL/SQL: ORA-00918: column ambiguously defined
Paginação com cursor
Enviado: Qua, 11 Ago 2010 10:52 am
por caracamaneh
O erro é nessa linha
Selecionar tudo
Error(18,1): PL/SQL: SQL Statement ignored
Error(19,22): PL/SQL: ORA-00918: column ambiguously defined
Enviado: Qua, 11 Ago 2010 1:29 pm
por SergioLBJr
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 :
Selecionar tudo
SELECT *
FROM ( SELECT topn.*, topn.ROWNUM rnum FROM (
SELECT
lembrando que neste exemplo eu busco o rownum da topn
Enviado: Qua, 11 Ago 2010 3:50 pm
por rogenaro
Tem como postar a consulta inteira?
Duas colunas de tabelas diferentes estão com o mesmo nome em alguma query mais interna, causand o erro.
Paginação com cursor
Enviado: Qua, 11 Ago 2010 6:03 pm
por caracamaneh
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.