Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: [mysql] errore cursore

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124

    errore cursore

    Ho questa dichiarazione di cursore che provoca un errore
    DECLARE cur CURSOR FOR
    SELECT codice, campo2 FROM prodotti
    WHERE ((resto<ciclo) AND (codice not in
    (SELECT codice FROM ordini WHERE stato='open')));

    ho provato ad eseguire la query da sola e funziona. Non capisco quale è il problema: forse la query è troppo articolata per un cursore? se si come posso risolvere? vorrei evitare di fare 2-3 controlli per ogni iterazione del cursore.

  2. #2
    1. va indicato il db, come da regolamento
    2. dici che funziona, ma cerchi aiuto... sii un po' più chiaro, e spiega bene cosa ti serve

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    la query SELECT codice, campo2 FROM prodotti
    WHERE ((resto<ciclo) AND (codice not in
    (SELECT codice FROM ordini WHERE stato='open')));
    funziona.

    mentre quando metto la query sul cursore mi da errore.
    dove indico il db?

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Originariamente inviato da seredavide
    mentre quando metto la query sul cursore mi da errore.
    dove indico il db?
    Punto 4 del regolamento

    4) Mettere fra parentesi quadre il nome del database server utilizzato con una breve descrizione del problema
    I titoli generici non aiutano chi dovrebbe darvi una mano e non facilitano la ricerca .
    Esempi:

    [MySQL] confronto tra date
    [SQL Server] creazione stored procedure
    [PostgreSQL] creazione trigger
    [Oracle] restore di un database
    [DB2] schedulazione backup
    etc

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    Originariamente inviato da comas17
    Punto 4 del regolamento

    4) Mettere fra parentesi quadre il nome del database server utilizzato con una breve descrizione del problema
    I titoli generici non aiutano chi dovrebbe darvi una mano e non facilitano la ricerca .
    Esempi:

    [MySQL] confronto tra date
    [SQL Server] creazione stored procedure
    [PostgreSQL] creazione trigger
    [Oracle] restore di un database
    [DB2] schedulazione backup
    etc
    Il database è mysql come faccio a modificare l'oggetto ora?
    mi scuso per il disguido

  6. #6
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Lo faccio io

  7. #7
    Come fai a dire che l'errore è nel cursore e non da un'altra parte? Che messaggio di errore ti dà?
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    L'errore è questo:

    mysql> source procedure.sql
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE cur CURSOR FOR
    SELECT codice, campo2 FROM prodotti
    WHERE ((res' at line 16
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER' at line 1

  9. #9
    Un paio di tentativi:

    1) Non è che per caso DECLARE CURSOR si trova fuori dalle stored procedure? Può essere usato solo DENTRO le stored procedure.
    2) Prima di DECLARE CURSOR c'è un'altra istruzione? Probabile che manchi il punto e virgola
    3) C'è l'istruzione DELIMITER nel file?
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    DELIMITER $
    CREATE PROCEDURE orderall
    (IN piva char(11), utente varchar(10), datacons date,
    OUT ok int)

    BEGIN
    declare...

    select ..
    SET num = num+1;

    INSERT INTO ordin..;

    /*dichiarazione del cursore*/
    DECLARE cur CURSOR FOR
    SELECT codice, campo2 FROM prodotti
    WHERE ((resto<ciclo) AND (codice not in
    (SELECT codice FROM ordini WHERE stato='open')));
    /*gestione eccezione*/

    DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET fatto=1;

    OPEN cur;
    /*ciclo*/
    REPEAT
    FETCH cur INTO cod,riordino;
    ...
    UNTIL fatto AND REPEAT;
    CLOSE cur;
    END$
    DELIMITER;


    questa è la sintassi a grandi linee della procedura
    1) è all'interno della procedura
    2)iscrtuzione prima ha il ;
    3)istruzione delimiter presente

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 © 2026 vBulletin Solutions, Inc. All rights reserved.