Class to manager MYSQL for Harbour/xHarbour
Custom Search

lunes, 2 de mayo de 2011

Procedimientos Almacenados / stored Procedures

Creamos el procedimiento almacenado desde el cliente mysql de nuestra preferencia


DELIMITER $
DROP PROCEDURE IF EXISTS born_in_year;
CREATE PROCEDURE born_in_year( year_of_birth INT )
BEGIN
SELECT first_name, last_name, birth, death from president where year( birth ) = year_of_birth;
END $
DELIMITER ;

para ejecutarlo simplemento lo hacenmos pro medio de un query


   cText = "CALL born_in_year( 1908 )"
   oQry := oServer:Query( cText )

el siguiente llamdo es importante para "terminar" el proceso
   oServer:NextResult()

veammos el ejemplo completo


#include "tdolphin.ch"

#define CRLF Chr( 13 ) + Chr( 10 )

PROCEDURE Main()
 
   LOCAL cText := ""
   LOCAL oQry, oServer
 
   SET CENTURY ON
   SET DATE FORMAT "dd/mm/yyyy"
 
   D_SetCaseSensitive( .T. )
 
   IF ( oServer := ConnectTo() ) == NIL
      RETURN NIL
   ENDIF
   cls
 
   cText = "CALL born_in_year( 1908 )"

   oQry := oServer:Query( cText )
 
   DolphinBrw( oQry, "Test" )
 
   oServer:NextResult()
 
   oQry:End()

   cText = "CALL born_in_year( 1913 )"

   oQry := oServer:Query( cText )
 
   DolphinBrw( oQry, "Test" )
 
   oServer:NextResult()
 
   oQry:End()

   cText = "call count_born_in_year( 1913, @count )"

   oQry := oServer:Execute( cText )
 
   oServer:NextResult()
 
   oQry := oServer:Query( "select @count as count" )
   
   ? "count is:"
   ?? oQry:count
 
   oQry:End()
 
 
 
RETURN







esto verifica que no exista otro query con resultado (por motivos de posibles multiples sentencias en los precedimeintos) y cierra el ciclo de existir otro query con resultado deberiamos hacer lo siguiente

   oQry:LoadNextQuery( )

asi cargamnos automaticamente el proximo resultado de un query para multi sentencias

ejemplo de multiples sentencias


#include "tdolphin.ch"


FUNCTION Main()

   LOCAL oServer, oQry

   D_SetCaseSensitive( .T. )
   Set_MyLang( "esp" )
 
   IF ( oServer := ConnectTo() ) == NIL
      RETURN NIL
   ENDIF
 
   oQry = oServer:Query( "select * from president; select * from student" )

   DolphinBrw( oQry, "President" )
 
   oQry:LoadNextQuery( )
 
   DolphinBrw( oQry, "Student" )
       
   oQry = NIL
 
   oServer:End()
 
RETURN NIL


#include "connto.prg"
#include "brw.prg"





No hay comentarios:

Publicar un comentario en la entrada