Page 1 of 1
Procedimientos Almacenados (Store Procedure) Error
Posted: Thu Feb 03, 2022 1:28 pm
by Willi Quintana
Estimados colegas_
Éste prpocedimiento lo declaro en el servidor de ésta manera, en un servidor local o en una red local funciona perfectamte, pero cuando utilido un servidor rn la "nube" (MySQL de CPanel), me manda un error:
no exiete el procedimiento: lo llamo asi desde MariaDb:
oProd := oCn:Call( "proc001" ) // lista de productos
en redl local funciona perfectamte,,, en un server remoto no funciona,,,,
Alguna sugerencia??
GRAcias
Code: Select all | Expand
//----------------------------------------------------------------------------------------------------------------------------
Function CargaStoreProc(oCn)
local cProc, oDatos
cProc := "SELECT specific_name FROM information_schema.routines WHERE specific_name = 'proc001'"
oDatos := oCn:Query(cProc)
If oDatos:RecCount() = 0 // no existe el procedure y lo creamos
cProc := "CREATE PROCEDURE proc001() "
cProc += "SELECT productos.cod_producto, productos.producto, productos.precio_venta1, productos.unidad, productos.saldo, productos.cod_proveedor, productos.cod_marca, productos.cod_grupo, productos.codbar1, productos.codbar2, productos.observaciones, proveedor.razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
cProc += "FROM productos "
cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
cProc += "ORDER BY productos.producto"
oCn:Execute(cProc)
if oCn:nError != 0 // // //
Return(.f.)
EndIf
Endif
Return(.t.)
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Thu Feb 03, 2022 2:48 pm
by Willi Quintana
Mr. Rao:
Al llamar a un procedimiento almacenado, esta sentencia no funciona en un servdor remoto
oProd := oCn:Call( "proc001" ) // lista de productos
Esta si funciona, pero me devuelve en un array, no en un cursor de datos....
oProd := oCn:Execute( "CALL proc001" ) // return array
Alguna sugerencia?
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Fri Feb 11, 2022 2:22 pm
by armando.lagunas
buenas colega:
como te conectas al servidor de la nube?
ODBC u otro tipo de conexión?
muestra un trozo de código en donde te conectas, así poder ayudarte
Saludos!
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Sat Feb 12, 2022 3:54 am
by Willi Quintana
Hola amigos...
Hago la conexion igual que en nua red local
oCn := Maria_Connect({ "201.264.555.454", "", "usuario", "contraseña" } )
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Sat Feb 12, 2022 1:36 pm
by carlos vargas
Verifica permisos de ejecucion, y que el procedure pertenesca al usuario que esta logeado al server
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Sun Feb 13, 2022 8:51 am
by nageswaragunupudi
When calling a stored procedure, this statement doesn't work on a remote
server oProd := oCn:Call( "proc001" ) // product list
I can not respond unless I test myself. Please give me time.
This one works, but it returns an array, not a cursor data....
oProd := oCn:Execute( "CALL proc001" ) // return array
For now, glad this works. This is a multi-dim array of the same data. Check xbrowse oProd and make sure.
Immediately after that, run
again without any parameters.
Very likely you will get aStructure as an array
Check "xbrowser aStruct" to make sure.
oData := TArrayData():New( oProd, aStruct )
Note: This is a workaround for the time being.
But ideally we should make the oCn:Call( "proc001" ) work.
I am assuming your FWH version is not too old. May I know your version?
Regret delayed response. I was unable to devote much time till recently.
I am back now.
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Sun Feb 13, 2022 8:53 am
by nageswaragunupudi
carlos vargas wrote:Verifica permisos de ejecucion, y que el procedure pertenesca al usuario que esta logeado al server
I too thought it might have to do with execution permissions, but oCn:Execute( "CALL proc" ) is working. If the problem is with permissions, I think this also should not work
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Mon Feb 14, 2022 2:01 am
by Willi Quintana
Mr. Rao hello.... Ragards
Code: Select all | Expand
//local mode. local lan
CargaStoreProc(oCn)
? oCn:cServerInfo 5.5.5-10.5.6-MariaDB
? oCn:OS Win64
? oCn:IsProcedure( "proc001" ) .t.
xbrowser oCn:ListProcedures() LIst View with "proc001" in register
oProd := oCn:Call( "proc001" )
? VALTYPE(oProd) O
? oProd:producto ACEITE VEGETAL
oProd := oCn:CallSP( "proc001" )
? VALTYPE(oProd) O
? oProd:producto ACEITE VEGETAL
aProd := oCn:Execute( "CALL proc001" )
? VALTYPE(oProd) O
? oProd:producto ACEITE VEGETAL
aProd := oCn:Execute( "CALL proc001()" )
? VALTYPE(oProd) O
? oProd:producto ACEITE VEGETAL
all OK
//remote mode. in cloud // cpanel
CargaStoreProc(oCn)
? oCn:cServerInfo 5.6.41-84.1
? oCn:OS Linux
? oCn:IsProcedure( "proc001" ) .f.
xbrowser oCn:ListProcedures() empty
oProd := oCn:Call( "proc001" )
? VALTYPE(oProd) U
? oProd:producto error
//----------------------------------------------------------------------------------------------------------------------------
Function CargaStoreProc(oCn) // inversiones2bhs is user database
local cProc, oDatos
cProc := "SELECT specific_name FROM information_schema.routines WHERE specific_name = 'proc001'"
oDatos := oCn:Query(cProc)
? oDatos:RecCount()
If oDatos:RecCount() = 0 // no existe el procedure y lo creamos inversiones2bhs is user database
cProc := "CREATE PROCEDURE inversiones2bhs.proc001() "
cProc += "SELECT productos.cod_producto, productos.producto, productos.precio_venta1, productos.unidad, productos.saldo, productos.cod_proveedor, productos.cod_marca, productos.cod_grupo, productos.codbar1,
productos.codbar2, productos.observaciones, proveedor.razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
cProc += "FROM productos "
cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
cProc += "ORDER BY productos.producto"
oCn:Execute(cProc)
if oCn:nError != 0 // // //
Return(.f.)
EndIf
Endif
Return(.t.)
Re: Procedimientos Almacenados (Store Procedure) Error
Posted: Mon Feb 14, 2022 11:13 am
by cmsoft
Hola Willi.
Si en lugar de generar un store procedure, creas una vista?
Code: Select all | Expand
CargaStoreProc(oCn)
oQry := oCn:Query("SELECT * FROM proc001")
xbrwose(oQry)
Function CargaStoreProc(oCn) // inversiones2bhs is user database
local cProc, oDatos
cProc := "SELECT table_name FROM information_schema.views WHERE table_name = 'proc001' AND table_schema = 'inversiones2bhs'"
oDatos := oCn:Query(cProc)
? oDatos:RecCount()
If oDatos:RecCount() = 0 // no existe el procedure y lo creamos inversiones2bhs is user database
cProc := "CREATE VIEW inversiones2bhs.proc001 AS "
cProc += "(SELECT productos.cod_producto AS cod_producto, productos.producto as producto, productos.precio_venta1 as precio_venta1, productos.unidad as unidad, productos.saldo as saldo, productos.cod_proveedor as cod_proveedor, productos.cod_marca as cod_marca, productos.cod_grupo as cod_grupo, productos.codbar1 as codbar1, productos.codbar2 as codbar2, productos.observaciones as observaciones, proveedor.razon_social as razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
cProc += "FROM productos "
cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
cProc += "ORDER BY productos.producto)"
oCn:Execute(cProc)
if oCn:nError != 0 // // //
Return(.f.)
EndIf
Endif
Return(.t.)
De esta manera, tambien podrías aplicar filtros despues a los datos que necesitas sacar
Code: Select all | Expand
oQry := oCn:Query("SELECT * FROM proc001 WHERE saldo > 0")
Igualmente creo que el Execute debería devolver el resultado de los registros cuando el store es una consulta a la base, pero en este caso creo que te puede ser de igual utilidad.