Page 1 of 1

Chiamare Stored Procedure

Posted: Tue Mar 31, 2009 4:13 pm
by nervino
Ciao a tutti,

problema: non riesco a catturare i dati di una stored procedure.

Ho provato a creare una stored procedure sul DB (e a richiamarla da una pagina di un nuovo modulo di cmsms)

Code: Select all

CREATE PROCEDURE pippo()
SELECT * cms_module_provamodulo;
Quindi ho provato a richiamare la procedura per popolare un dropdown menu, in questo modo

Code: Select all

$db = &$gCms->GetDb();
$dbresult = $db->query("CALL pippo()");

while ($dbresult && $row2 = $dbresult->FetchRow())
  {
    $list[$row2['testo']] = $row2['provamodulo_id'];
	  }

$smarty->assign('start_form', $this->CreateFormStart($id, 'save_record', $returnid));
$smarty->assign('title_description',$this->Lang('title_description'));
$smarty->assign('input_description',$this->CreateInputDropdown($id,'nome_select',$list));

$smarty->assign('title_testo',$this->Lang('title_testo')); 
$smarty->assign('input_testo',$this->CreateInputText($id,'testo',$testo));

$smarty->assign('submit', $this->CreateInputHidden($id,'provamodulo_id',$sid).$this->CreateInputSubmit($id, 'submit', $this->Lang('submit')));
$smarty->assign('end_form', $this->CreateFormEnd());
Probabilmente sbaglio il modo di richiamare la procedura..?

Re: Chiamare Stored Procedure

Posted: Tue Mar 31, 2009 4:21 pm
by alby
[quote="nervino"]

Code: Select all

CREATE PROCEDURE pippo()
SELECT * cms_module_provamodulo;
Quindi ho provato a richiamare la procedura per popolare un dropdown menu, in questo modo

Code: Select all

$db = &$gCms->GetDb();
$dbresult = $db->query("CALL pippo()");

while ($dbresult && $row2 = $dbresult->FetchRow())
  {
    $list[$row2['testo']] = $row2['provamodulo_id'];
	  }
[/quote]

1. Hai provato a vedere cosa c'è in $row2?
2. Secondo me è: SELECT * FROM cms_module_provamodulo;

Alby

Re: Chiamare Stored Procedure

Posted: Wed Apr 01, 2009 1:00 pm
by nervino
In effetti quello che stavo provando a fare è:
1) creare una procedura che esegue una SELECT su una tabella
2) chiamare la procedura da un modulo di CMSMS e valorizzare un menu dropdown con il recordset generato dalla procedura stessa

Da quello che mi dici, e da altre indicazioni che ho trovato nelle specifiche MYSQL, credo di capire che una procedura che richiama SELECT come la stavo facendo, genera un errore. Infatti se chiamo CALL pippo() dalla shell di phpmyadmin mi dice:

Code: Select all

PROCEDURE test.pippo can't return a result set in the given context 
Ho capito bene o mi stavi dicendo un'altra cosa?

Grazie!

Re: Chiamare Stored Procedure

Posted: Wed Apr 01, 2009 3:29 pm
by alby
nervino wrote: Ho capito bene o mi stavi dicendo un'altra cosa?
No, un'altra cosa: vedo errori di sintassi (se è quella che hai postato).
Sicuramente il SELECT non va bene
Comunque bisogna stare attenti a molte condizioni, non ultima avere i privilegi per farlo (CREATE ROUTINE)

Non capisco però a cosa ti serve?

Alby

Re: Chiamare Stored Procedure

Posted: Wed Apr 01, 2009 3:39 pm
by nervino
Sto cercando di capire come funzionano i moduli e faccio un po' di prove. Sono partito da Skeleton e lo sto modificando.

Voglio creare una stored procedure in MYSQL (usando phpmyadmin, ad esempio) che selezioni tutti i dati di una tabella del DB test. Nell'esempio, ho creato la tabella "cms_module_provamodulo" che contiene i campi provamodulo_id, description e testo e con il recordset risultante dalla chiamata della procedura vorrei riempire un dropdown menu usando la funzione del cms CreateInputDropdown().

Re: Chiamare Stored Procedure

Posted: Wed Apr 01, 2009 3:52 pm
by alby
nervino wrote: Voglio creare una stored procedure in MYSQL
Quello che intendevo è: perchè vuoi usare le stored procedure che non tutti supportano o che bisogna modificare la sintassi?
O c'è un motivo particolare?

Perchè la CreateInputDropdown() la fai direttamente con una SELECT senza impegnare memoria inutilmente

Alby

Re: Chiamare Stored Procedure

Posted: Wed Apr 01, 2009 4:02 pm
by nervino
Solo per provare ad usare le STORED nel cms  ;D.
Devo sviluppare un'applicazione con un mio amico che si occupa di progettare il DB e che, in alcuni casi, le dovrà usare, quindi stavo provando partendo da una situazione "semplice" come una classica SELECT.

Il dropdown menu sono già riuscito a valorizzarlo cinserendo la query SELECT * FROM ecc. direttamente nel codice del modulo, senza SP  :).
(Mi sto divertendo 'na cifra! Le funzioni già pronte di CMSMS sono comodissime!!)