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