Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833

    Declare cursor, open, fetch next...

    Ciao a tutti, mi direste come si fa per gestire una select con un cursore.
    in pratica ho una select che mi seleziona tutti i record di un file, pero' quando il file
    contiene piu' 2000 record la pagina sta le "ore" per caricare, quindi pensavo
    di utilizzare un cursore dentro a un ciclo che visualizza solo 200 record e se
    selezionato il tasto next leggere i successivi 200 se invece selezionato previous i precedenti
    200.

    Ora il fatto e' che in php non so come fare e non ho trovato molti esempi o non li ho capiti, quindi vi chiedevo consigli.

    Ps. in RPG e' facile questa situazione solo che so come riportarla in php

    RPG:

    C/EXEC SQL
    C+ DECLARE C1 CURSOR FOR S1
    C/END-EXEC

    EVAL STMT = 'CREATE INDEX X1 ON CLSSI00F -
    (CLSCLI)' + ' ' + 'SELECT *' +
    ' ' + 'FROM CLSSI00F' + ' ' +
    'WHERE CLSCLI >=' + '?' +
    ' ' + 'ORDER BY CLSCLI'
    ' ' + 'OPTIMIZE FOR ALL ROWS'


    C/EXEC SQL
    C+ PREPARE S1 FROM :STMT
    C/END-EXEC

    C/EXEC SQL
    C+ OPEN C1 USING :CLIK
    C/END-EXEC

    C DO SFLPAG PAGINA
    C/EXEC SQL
    C+ FETCH NEXT FROM C1 INTO CLSTAD
    C/END-EXEC


    Dovrei replicare questa gestione ma non ho la piu' pallida idea di come fare.

    Ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Uppetto, da solo non so neanche da dove incominciare, dopo questo post
    non vi rompo piu' le walle per un po'.

    Ciao

  3. #3
    Te lo spiego sommariamente:

    -nella query imposti il limit (lo fai con sql)

    -con php passi attraverso l'url una variabile che imposta il limit della query (dovrai fare una funzione che dinamicamente crea la query in base a ciò che gli dice la var nell'url)

    Ciao.
    Barnacle

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Sarebbe proprio quello che mi serve, pero' mi sa che il LIMIT BY non funziona nella situazione in cui sto' lavorando, perche' sto usando una connessione al DB2 di un as400
    e avevo gia' provato ma non "accettava il limit"

    quindi ho dovuto fare una cosa (per adesso) cosi'

    $cursor = '250';

    $sql = "
    SELECT CAST(MRPRID AS CHAR(3) CCSID 280),....
    FROM $LNKLIB.MRMOBJP where MROBJ like '$subobj%' order by MRLIB, MROBJ FETCH FIRST ".$cursor." ROWS ONLY";

    solo che il fetch first non va bene, mi servirebbe un'alternativa al limit, ma che abbia la
    stessa logica.

    Consigli? ciao

  5. #5
    Tu sei avanti anni luce rispetto a me per cui...
    ma x limit intendo:

    LIMIT 0 , 30

    Non è che che non segue lo standard sql?
    Poi passo perchè ... te l'ho già detto.
    Ciao.
    Barnacle

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Partendo dal presupposto che sicuramente sono indietro di te di anni luce,
    per quanto riguarda lo standard dovrebbe seguirlo solo che il limit
    non e' accettato, ho provato in tutti i modi a impostarlo ma niente.

    Altri consigli su come posso fare per Simulare il LIMIT BY in questo statement sql?

    FROM $LNKLIB.MRMOBJP where MROBJ like '$subobj%' order by MRLIB, MROBJ FETCH FIRST ".$cursor." ROWS ONLY";

    Alla fine devo riuscire a non caricare tutti i record in una volta, ma farlo in piu'
    sequenze, questo oltre che per ottimizzare la "velocita'" della pagina e' anche perche'
    il file che seleziono in alcune aziende ha piu' di centomila oggetti che ovviamente
    non posso caricare e stampare in una botta, se no' la pagina ci sta un giorno a caricare
    ammesso che ci riesca.

    Consigli, discussioni con problemi simili, qualunque cosa per uscirne vivo ?

    Ciao e grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.