Procedimientos Almacenados (Store Procedure) Error

Procedimientos Almacenados (Store Procedure) Error

Postby Willi Quintana » Thu Feb 03, 2022 1:28 pm

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 view  RUN

//----------------------------------------------------------------------------------------------------------------------------
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.)
 
User avatar
Willi Quintana
 
Posts: 1020
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Procedimientos Almacenados (Store Procedure) Error

Postby Willi Quintana » Thu Feb 03, 2022 2:48 pm

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?
User avatar
Willi Quintana
 
Posts: 1020
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Procedimientos Almacenados (Store Procedure) Error

Postby armando.lagunas » Fri Feb 11, 2022 2:22 pm

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!
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: Procedimientos Almacenados (Store Procedure) Error

Postby Willi Quintana » Sat Feb 12, 2022 3:54 am

Hola amigos...
Hago la conexion igual que en nua red local

oCn := Maria_Connect({ "201.264.555.454", "", "usuario", "contraseña" } )
User avatar
Willi Quintana
 
Posts: 1020
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Procedimientos Almacenados (Store Procedure) Error

Postby carlos vargas » Sat Feb 12, 2022 1:36 pm

Verifica permisos de ejecucion, y que el procedure pertenesca al usuario que esta logeado al server
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Procedimientos Almacenados (Store Procedure) Error

Postby nageswaragunupudi » Sun Feb 13, 2022 8:51 am

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
Code: Select all  Expand view  RUN

aStruct := oCn:Execute()
 

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.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Procedimientos Almacenados (Store Procedure) Error

Postby nageswaragunupudi » Sun Feb 13, 2022 8:53 am

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
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Procedimientos Almacenados (Store Procedure) Error

Postby Willi Quintana » Mon Feb 14, 2022 2:01 am

Mr. Rao hello.... Ragards
Code: Select all  Expand view  RUN


//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.)
 
User avatar
Willi Quintana
 
Posts: 1020
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Procedimientos Almacenados (Store Procedure) Error

Postby cmsoft » Mon Feb 14, 2022 11:13 am

Hola Willi.
Si en lugar de generar un store procedure, creas una vista?
Code: Select all  Expand view  RUN

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 view  RUN

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.
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 49 guests