Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Ayuda con un Stored Procedure en MySQL (https://www.clubdelphi.com/foros/showthread.php?t=59802)

enecumene 09-09-2008 18:15:04

Ayuda con un Stored Procedure en MySQL
 
Hola compañeros, tengo este procedimiento:

Código SQL [-]
CREATE PROCEDURE sp_Consped
(
OUT S_No bigint(11),
OUT S_noped varchar(10),
OUT S_status varchar(100),
OUT S_respon varchar(100),
OUT S_fecharec date,
OUT S_fechaent date,
OUT S_Dpto varchar(100),
OUT S_tramiteno varchar(20),
OUT S_Area varchar(50),
OUT S_tipo varchar(20),
OUT S_urgente varchar(2),
OUT S_ficha varchar(15),
OUT S_fechasol date,
OUT S_solname varchar(100),
OUT S_hora1 varchar(25),
OUT S_User varchar(50),
OUT S_Dateuser date,
OUT S_Dptoid INT,
OUT S_Rubroid INT,
OUT S_Rubro varchar(100),
OUT S_Responid INT,
OUT S_Statusid INT,
OUT S_Hora varchar(25),
OUT S_Respon1 varchar(100)
)
BEGIN
/*Muestra los registros*/

Select p.no, p.no_ped, p.status, p.statusid, p.responsable, p.responsable1, p.fecha_sol_ped,
p.dpto, p.dptoid, p.fecha_rec_ped, p.tipo_exp, p.descripcion, p.fecha_ent_exp, p.tramite_no,
p.area, p.urgente, p.ficha, p.sol_name, p.hora, p.hora1, p.user, p.date, p.rubroid, p.responid
INTO S_No, S_noped, S_status, s_Statusid, S_Respon, S_Respon1, S_fechasol, S_Dpto, S_Dptoid, S_fecharec,
S_tipo, S_Rubro, S_fechaent, S_tramiteno, S_Area, S_urgente, S_ficha, S_solname, S_Hora, S_hora1, S_User,
S_Dateuser, S_Rubroid, S_Responid from reg_pedidos p; 

END;

Al generarlo a través de PhpAdmin me tira el error:

Cita:

MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 36
¿Me está indicando que debo poner comillas? de veras no encuentro el problema o ¿es que debo generarlo en la linea de comando?

Saludos.

maeyanes 09-09-2008 18:23:01

Hola...

Checa esta línea:

Código SQL [-]
p.area, p.urgente, p.ficha, p.sol_name, p.hora, p.hora1, p.user, p.date, p.rubroid, p.responid

Si te fijas estás usando user y date, las cuales son dos palabras reservadas de SQL. Intenta encerrandolas entre comillas dobles: p."user", p."date".


Saludos...

enecumene 09-09-2008 18:30:01

Cita:

Empezado por maeyanes (Mensaje 312828)
Hola...

Checa esta línea:

Código SQL [-]p.area, p.urgente, p.ficha, p.sol_name, p.hora, p.hora1, p.user, p.date, p.rubroid, p.responid


Si te fijas estás usando user y date, las cuales son dos palabras reservadas de SQL. Intenta encerrandolas entre comillas dobles: p."user", p."date".


Saludos...

Cita:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"user"', p.'"date"', p.rubroid, p.responid
INTO S_No, S_noped, S_status, s_Sta' at line 33
Esto me salió.

Saludos.

enecumene 09-09-2008 18:58:57

Aparentemente no son esos campos, porque los quité y me da el mismo error. ¿Qué leñes será? :D, es la primera vez que estoy trabajando con SP, ¿es posible que hay usar comillas ``, "" ó ''?.

Saludos.

egostar 09-09-2008 19:06:08

Hola

Dos cosas amigo, porque usas p.xxxxxx si no estas usando mas que una sola tabla, la otra es que pasa si usas comilla simple en lugar de comillas.

Salud OS

enecumene 09-09-2008 19:08:40

Cita:

Empezado por egostar (Mensaje 312842)
Hola

Dos cosas amigo, porque usas p.xxxxxx si no estas usando mas que una sola tabla, la otra es que pasa si usas comilla simple en lugar de comillas.

Salud OS

Bueno lo primero son cosas mías por novatadas :D, lo segundo me da el mismo error.

jhonny 09-09-2008 19:14:31

No conozco los procedimiento almacenados de MySQL, pero supongo que deberia quedar asi:

Código SQL [-]
CREATE PROCEDURE sp_Consped
(
OUT S_No bigint(11),
OUT S_noped varchar(10),
OUT S_status varchar(100),
OUT S_respon varchar(100),
OUT S_fecharec date,
OUT S_fechaent date,
OUT S_Dpto varchar(100),
OUT S_tramiteno varchar(20),
OUT S_Area varchar(50),
OUT S_tipo varchar(20),
OUT S_urgente varchar(2),
OUT S_ficha varchar(15),
OUT S_fechasol date,
OUT S_solname varchar(100),
OUT S_hora1 varchar(25),
OUT S_User varchar(50),
OUT S_Dateuser date,
OUT S_Dptoid INT,
OUT S_Rubroid INT,
OUT S_Rubro varchar(100),
OUT S_Responid INT,
OUT S_Statusid INT,
OUT S_Hora varchar(25),
OUT S_Respon1 varchar(100)
)
BEGIN
/*Muestra los registros*/

Select p.no, p.no_ped, p.status, p.statusid, p.responsable, p.responsable1, p.fecha_sol_ped,
p.dpto, p.dptoid, p.fecha_rec_ped, p.tipo_exp, p.descripcion, p.fecha_ent_exp, p.tramite_no,
p.area, p.urgente, p.ficha, p.sol_name, p.hora, p.hora1, p.user, p.date, p.rubroid, p.responid
from reg_pedidos p
INTO S_No, S_noped, S_status, s_Statusid, S_Respon, S_Respon1, S_fechasol, S_Dpto, S_Dptoid, S_fecharec,
S_tipo, S_Rubro, S_fechaent, S_tramiteno, S_Area, S_urgente, S_ficha, S_solname, S_Hora, S_hora1, S_User,
S_Dateuser, S_Rubroid, S_Responid; 

END;

Cita:

Empezado por enecumene (Mensaje 312844)
Bueno lo primero son cosas mías por novatadas

En cuanto a esto, debo confesar que tambien lo hago muy a menudo, pero es porque en muchas ocasiones necesito extendender el SQL un poco mas, de esa forma me evito posibles inconvenientes de una vez por todas.

enecumene 09-09-2008 19:18:25

Pues me hace lo mismo amigo Jhonny, siempre es en la línea 35, 36, parece que hay que usar '' pero no lo entiendo de verdad.

Saludos.

egostar 09-09-2008 19:31:31

Lo que he leido al respecto indica que deberias de usar el delimitador ``. Otra cuestión tal vez a manera de chapuza :D:D:D, estás haciendo un select de todos los campos de tu tabla????, si es así, porque no usar

Código SQL [-]
SELECT * FROM TABLA
INTO .........

Salud OS

jhonny 09-09-2008 19:36:01

Cita:

Empezado por enecumene (Mensaje 312851)
Pues me hace lo mismo amigo Jhonny, siempre es en la línea 35, 36, parece que hay que usar '' pero no lo entiendo de verdad.

Saludos.

Para mi que debe ser lo que ya ha dicho maeyanes, user y date, deben ser palabras reservadas.

enecumene 09-09-2008 19:43:24

¡Me rindo! :mad: :mad:

enecumene 09-09-2008 19:45:22

Cita:

Empezado por egostar (Mensaje 312856)
Lo que he leido al respecto indica que deberias de usar el delimitador ``. Otra cuestión tal vez a manera de chapuza :D:D:D, estás haciendo un select de todos los campos de tu tabla????, si es así, porque no usar

Código SQL [-]SELECT * FROM TABLA INTO .........


Salud OS

No amigo, no son todos los campos que quiero mostrar.

Cita:

Empezado por jhonny (Mensaje 312860)
Para mi que debe ser lo que ya ha dicho maeyanes, user y date, deben ser palabras reservadas.

Había comentado anteriormente que los había quitado y me presentaba el mismo error.

Saludos.

jhonny 09-09-2008 19:54:26

Cita:

Empezado por enecumene (Mensaje 312869)
Había comentado anteriormente que los había quitado y me presentaba el mismo error.

Saludos.

¿Cuando los quitaste, Te aseguraste tambien de quitar la referencia a las variables de salida?, osea, S_User, S_Dateuser

egostar 09-09-2008 19:55:26

Amigo

En Firebird, los parámetros de salida los tengo que asignar con ':' antes del parámetro, de tal forma que sería algo así....

Código SQL [-]
INTO :S_No, :S_noped, :S_status, :s_Statusid, :S_Respon, :S_Respon1, .....

Salud OS

enecumene 09-09-2008 19:56:54

Cita:

Empezado por jhonny (Mensaje 312879)
¿Cuando los quitaste, Te aseguraste tambien de quitar la referencia a las variables de salida?, osea, S_User, S_Dateuser

Sip, los había quitado. ;)

Saludos.

PD. me da la impresión de que deberé hacerlo por comando :eek: (Cosa que odio :mad:).

TOPX 09-09-2008 19:58:56

Hola,
  1. Podría ser el delimiter:

    Código SQL [-]
    DELIMITER //
     
    CREATE PROCEDURE sp_Consped(
     /* ... */
    )
    BEGIN
     /* ...; */
    END //
     
    DELIMITER ;
  2. Si define el montón de parámetros OUT es porque guardará sus valores en @variables, pero si sólo va a retornar los registros del select, casi estoy seguro no harían falta los parámetros.

enecumene 09-09-2008 20:00:42

Cita:

Empezado por egostar (Mensaje 312881)
Amigo

En Firebird, los parámetros de salida los tengo que asignar con ':' antes del parámetro, de tal forma que sería algo así....

Código SQL [-]INTO :S_No, :S_noped, :S_status, :s_Statusid, :S_Respon, :S_Respon1, .....


Salud OS

Cita:

MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':S_No, :S_noped, :S_status, :S_Statusid, :S_Respon, :S_Respon1, :S_fechasol, :S_' at line 34
:D:D:D:D:D

enecumene 09-09-2008 20:04:42

Cita:

Empezado por TOPX (Mensaje 312886)
Hola,
  1. Podría ser el delimiter:

    Código SQL [-]DELIMITER //

    CREATE PROCEDURE sp_Consped(
    /* ... */
    )
    BEGIN
    /* ...; */
    END //

    DELIMITER ;
  2. Si define el montón de parámetros OUT es porque guardará sus valores en @variables, pero si sólo va a retornar los registros del select, casi estoy seguro no harían falta los parámetros.

Pues parece que tampoco es el delimiter:

Cita:

MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //

CREATE PROCEDURE sp_Consped
(
OUT S_No bigint(11),
OUT S_nope' at line 1
Saludos.

felipe88 09-09-2008 20:22:30

Hola, Tampoco conozco MySQL pero como dice jhonny ¿no te funciona? no hay que darle return o algo por el estilo, podrias mirar en este articulo a ver...

enecumene 09-09-2008 20:30:39

Cita:

Empezado por felipe88 (Mensaje 312892)
Hola, Tampoco conozco MySQL pero como dice jhonny ¿no te funciona? no hay que darle return o algo por el estilo, podrias mirar en este articulo a ver...

Efectivamente ese es el artículo que he estado viendo y que no lo he entendido del todo, por eso puse este hilo aquí.

Saludos.


La franja horaria es GMT +2. Ahora son las 05:53:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi