2009-07-11 24 views
23

Ho una mysql procedura immagazzinata da questo (google book), ed un esempio è questo:mysql stored-procedure: parametro di

DELIMITER $$ 

DROP PROCEDURE IF EXISTS my_sqrt$$ 
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT) 
BEGIN 
    SET out_number=SQRT(input_number); 
END$$ 

DELIMITER ; 

La procedura compila bene. (Sto usando MySQL Query Browser su Ubuntu).

Tuttavia quando chiamo la procedura:

CALL my_sqrt(4,@out_value); 

(anche in Query Browser)

restituisce un errore:

(1064) check the manual that correspond to the... 

Perché non è questo esempio di lavoro?

risposta

29

Impossibile replicare. Ha funzionato bene per me:

mysql> CALL my_sqrt(4, @out_value); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @out_value; 
+------------+ 
| @out_value | 
+------------+ 
| 2   | 
+------------+ 
1 row in set (0.00 sec) 

Forse dovresti incollare l'intero messaggio di errore invece di riepilogarlo.

+0

Qui è l'intero errore: Hai errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a "SELECT @out_value" alla riga 2 – domagojk

+2

Ok. Mi sembra che abbia qualcosa a che fare con il tuo essere in Query Browser. Provalo dallo strumento da riga di comando mysql. – chaos

+0

ha avuto lo stesso problema con QueryBrowser. – fubo

1

Ho appena provato a chiamare una funzione nel terminale piuttosto che in MySQL Query Browser e funziona. Così, sembra che sto facendo qualcosa di sbagliato in quel programma ...

Non so cosa da quando ho chiamato alcune procedure prima di successo (ma lì dove nessun parametri out) ...

per questo ero entrato

CALL my_sqrt(4,@out_value); 
SELECT @out_value; 

e risulta con un errore:

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 'SELECT @out_value' at line 2

Stranamente, se scrivo solo:

012.
CALL my_sqrt(4,@out_value); 

Il messaggio risultato è: "Query annullata"

credo, per ora userò unico terminale ...

2

So che questo è un vecchio thread, ma se qualcuno è alla ricerca di una risposta sul perché le loro procedure non funzionano sul banco di lavoro e pensano che l'unico risultato sia "Query cancellata" o qualcosa del genere senza indizi:

l'output con errori o problemi è nascosto. Non so perché, capisco che è fastidioso, ma è lì. sposta il cursore sopra la riga sopra il messaggio, si trasformerà in una doppia freccia (su e giù), quindi puoi fare clic e trascinare quella linea, quindi vedrai una console con il messaggio che hai perso!

5

È necessario utilizzare la firma corretta per il parametro di input * IN manca nel codice riportato di seguito.

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT) 
+0

IN è opzionale, nulla prima che un parametro implichi IN –

+0

Quindi, come si fa a distinguere che il parametro è per Input o Output ...? –

+0

È una cattiva pratica Sono d'accordo ma la domanda sarebbe ancora valida. La query –

1
SET out_number=SQRT(input_number); 

Invece di questo articolo:

select SQRT(input_number); 

Si prega di non scrivere SET out_number e il vostro parametro di ingresso dovrebbe essere:

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
+0

e sql è CALL my_sqrt (4, @ out_value); –

Problemi correlati