Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

problema con mysql crear un procedimiento

Estas en el tema de problema con mysql crear un procedimiento en el foro de Mysql en Foros del Web. ola tengo un procedimiento para crear un auto generador de codigo que al aves cuenta tengo estos datos esta esla tabla CREATE TABLE generador (Parametro ...
  #1 (permalink)  
Antiguo 06/04/2012, 19:39
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 8 años
Puntos: 0
problema con mysql crear un procedimiento

ola tengo un procedimiento para crear un auto generador de codigo que al aves cuenta
tengo estos datos
esta esla tabla
CREATE TABLE generador (Parametro varchar(40)primary key,
numero int);

insert into generador values('producto',0);

y este es el procedimiento me sale error en el procedimiento

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 '()$$
create PROCEDURE Genera (param varchar(40),out codgen varchar(8))
BEGIN
' at line 1

DROP PROCEDURE IF EXISTS Genera()$$
create PROCEDURE Genera (param varchar(40),out codgen varchar(8))
BEGIN
declare ceros int, ult INT;
select ult = numero + 1 from `generador` where Parametro = param,
SET ceros = 3 - LENGTH(CONVERT(VARCHAR,ult)),
SET codgen = LEFT(param,5)+REPLICATION('0',ceros) + CONVERT(VARCHAR,ult),
update `generador` set numero=ult where parametro =param,
END$$

ayuda xfa
  #2 (permalink)  
Antiguo 07/04/2012, 03:46
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 8 años, 9 meses
Puntos: 42
Respuesta: problema con mysql crear un procedimiento

Hola losaltlv,

Un par de temas, el primero, tus sentencias deben terminar en punto y coma (;) no en coma (,), ejemplo:

Código SQL:
Ver original
  1. UPDATE `generador` SET numero=ult WHERE parametro =param,
debería ser:
Código SQL:
Ver original
  1. UPDATE `generador` SET numero=ult WHERE parametro =param;
Lo segundo, el valor de la variable ult en la sentencia:
Código SQL:
Ver original
  1. SELECT ult = numero + 1 FROM `generador` ...
seguramente siempre dará como resultado NULL, una mejor opción sería usar:
Código SQL:
Ver original
  1. SELECT numero + 1 INTO ult FROM `generador` WHERE Parametro = param;
Espero sea útil la información.
  #3 (permalink)  
Antiguo 08/04/2012, 09:05
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 8 años
Puntos: 0
Respuesta: problema con mysql crear un procedimiento

hola amigo gracias x responderme pero es que el problema es q yo recien estoy aprendiendo mysql y oracle ya q sql ya se pero no se mucho de mysql y oracle el codigo que qiero hacer es pasar mi codigo genereador d codigos de sql a mysql jeje pero me salen errores en las sintaxis q colera


este es el codigo en sql

CREATE TABLE generador (Parametro varchar(40)primary key,
numero int)
go
el nombre producto cliente etc son lso nombres de las tablas y estas seran contadas desde 0 tbm sirve como un contador para ver cuentos datos tenemso insertados en las tablas
insert into generador values('producto',0)
insert into generador values('cliente',0)
insert into generador values('usuarios',0)
insert into generador values('marca',0)
insert into generador values('natural',0)
insert into generador values('juridico',0)
insert into generador values('00000000',0)
insert into generador values('boleta',0)

select * from generador

delete from generador


CREATE PROCEDURE SPGENERADOR
@PARAM VARCHAR(40),
@CODGEN VARCHAR(8) OUTPUT
AS
DECLARE @CEROS INT,@ULT INT
SELECT @ULT = numero + 1 FROM GENERADOR WHERE PARAMETRO = @PARAM
SET @CEROS = 3 - LEN(CONVERT(VARCHAR,@ULT))
SET @CODGEN = LEFT(@PARAM,5) + REPLICATE('0',@CEROS) + CONVERT(VARCHAR,@ULT)
UPDATE GENERADOR SET numero = @ULT WHERE PARAMETRO = @PARAM
GO

y asi lo ejecuto

create proc SP_NueUsu
@codUsu varchar(8)output,
@acc varchar(20),
@id varchar(20),
@pass varchar(20)
as
begin
declare @XCOD varchar(8)
EXECUTE SPGENERADOR 'usuarios',@XCOD OUTPUT
SET @codUsu= @XCOD
INSERT INTO usuarios VALUES(@codUsu,@acc,@id,@pass)
END
espero su ayuda :)

Última edición por losaltlv; 08/04/2012 a las 10:18
  #4 (permalink)  
Antiguo 08/04/2012, 10:20
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 8 años
Puntos: 0
Respuesta: problema con mysql crear un procedimiento

ahora en mysql lo estoy haciendo asi
CREATE TABLE generador (Parametro varchar(40)primary key,
numero int);

insert into generador values('producto',0);
insert into generador values('cliente',0);
insert into generador values('usuarios',0);
insert into generador values('marca',0);
insert into generador values('natural',0);
insert into generador values('juridico',0);
insert into generador values('00000000',0);
insert into generador values('boleta',0);
select * from generador;

create PROCEDURE Genera (param varchar(40),INOUT codgen varchar(8))
BEGIN
declare ceros int;
declare ult INT;
SELECT ult=numero + 1 FROM `generador` WHERE Parametro = param;
SET ceros = 3 - LENGTH(ult);
SET codgen = LEFT(param,5)+REPEAT('0',ceros) +convert(ult,char);
update `generador` set numero=ult where parametro =param;
END

create table usuarios(
codusu varchar(8)primary key,
usu_id varchar(20),
usu_pass varchar(20)
);

create procedure usu_nuevo(INOUT codusu varchar(8),id varchar(20),pass varchar(20))
begin
declare xcod varchar(8);
call Genera ('usuarios',xcod);
set codusu=xcod;
insert into usuarios VALUES(codusu,id,pass);
end;

call usu_nuevo('','clever','123

pero cuando lo ejecuto me sale este error :V

OUT or INOUT argument 1 for routine ferreteria.usu_nuevo is not a variable or NEW pseudo-variable in BEFORE trigger

yo creo q el error esta en
call Genera ('usuarios',xcod);
en el momento de ejecutar el proedimiento para asignar la variable deberia ser call Genera ('usuarios',out xcod);
pero sle este error
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 'out xcod);
set codusu=xcod;
insert into usuarios VALUES(codusu,id,pass);
end' at line 4

bueno gracias a los q se tarden en leeer esto ejeje
  #5 (permalink)  
Antiguo 08/04/2012, 14:54
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 8 años, 9 meses
Puntos: 42
Respuesta: problema con mysql crear un procedimiento

Hola losaltlv,

Entiendo que cuando dices que conoces SQL te refieres a MS SQL Server, por la sintaxis del procedimiento almacenado que tratas de migrar.

Mi recomendación antes que continúes con la migración del procedimiento almacenado es leer las siguientes secciones del manual de MySQL:
El procedimiento almacenado mostrado no es muy complicado de migrar, pero es necesario que tengas claros los conceptos.

Cualquier duda en la lectura, avisa.
  #6 (permalink)  
Antiguo 09/04/2012, 18:13
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 8 años
Puntos: 0
Respuesta: problema con mysql crear un procedimiento

esta en ingles :P
bueno yo aprendo mas rapido con ejemplos pero = gracias x la ayuda seguire investigando

Etiquetas: procedimiento, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:37.