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

Error 1305

Estas en el tema de Error 1305 en el foro de Mysql en Foros del Web. Hola a todos. Muy buenas noches, mi nombre es Martin Raygoza y soy nuevo por aqui. El motivo de escribir y pedir la yauda de ...
  #1 (permalink)  
Antiguo 24/09/2010, 22:16
Avatar de BanScorpio  
Fecha de Ingreso: septiembre-2010
Ubicación: Guadalajara, Jalisco, Mexico
Mensajes: 65
Antigüedad: 14 años, 2 meses
Puntos: 1
Mensaje Error 1305

Hola a todos.
Muy buenas noches, mi nombre es Martin Raygoza y soy nuevo por aqui.
El motivo de escribir y pedir la yauda de todo quien desee ayudarme, es por estoy trabajando con MySQL y tengo una base de datos llamada biblioteca que posee un procedimiento en el cual al hacer un prestamo, el estatus se cambie a prestado y devuelto, dependiendo el caso; y un disparador, en el cual al hacer el prestamo y el estado sea "prestado" le existencia de los libros disminuya en 1 y si es "devuelto", se aumente en 1.

El problema es que al llamar al procedimiento despues de haber ingresado el disparador, me marca el error del titulo, pero de la siguiente manera:

mysql> call presl(123,124,107,'24/sep/2010','Prestado');
ERROR 1305 (42000): FUNCTION biblioteca.existencia does not exist


¿Alguien podria ayudarme?

De antemano, gracias.

Postdata
Dejo una copia del script realizado.

Código:
 create database Biblioteca; /* Se crea la base de datos */

use Biblioteca;            /*Se activa la base de datos*/

create table Libro        /* Se crea una tabla con el nombre de libros */
(isbn int not null,
titulo varchar(15) not null,
autor varchar(15) not null,
editorial varchar(15) not null,
existencia int not null,
constraint pk_libro primary key (isbn));

create table Lector        /* Se crea una tabla con el nombre de Lector */
(codigo int not null,
nombre varchar(25) not null,
direccion varchar(30) not null,
telefono varchar(15) not null,
constraint pk_lector primary key (codigo));

create table Prestamo        /* Se crea una tabla con el nombre de Prestamo */
(codigolector int not null,
isbnlibro int not null,
numprest int not null,
fecha varchar (10) not null,
estado varchar(10) not null,
constraint fk_codi foreign key (codigolector) references lector(codigo),
constraint fk_sbn foreign key (isbnlibro) references libro(isbn),
constraint pk_prestamo primary key (numprest));

insert into Libro   /* Se insertan los datos de la tabla Libro */
values(124,'100 años de soledad','G. G. Marquez','McGraw-Hill',2558);

insert into Lector   /* Se insertan los datos de la tabla Lector */ 
values(123,'Martin de Jesus Raygoza','San Ramon #28','331-249-8702');

delimiter //

create procedure presl (codlector int, numlibro int,np int, fech varchar (15), estatus varchar (15)) 
begin     
if exists(select* from lector where codigo=codlector) 
and        
exists(select* from libro where isbn=numlibro)
then                            
begin                              
if not exists(select* from prestamo where np=numprest)then                 
begin           
insert prestamo         
values(codlector,numlibro,np,fech,estatus);         
select 'Prestamo Realizado con exito'Aviso;    
end;
else 
begin        
update prestamo        
set estado=estatus                    
where codigolector=codlector and isbnlibro=numlibro and np=numprest and estado='Prestado';        
select 'EL Libro se ha devuelto' AVISO;        
end;
end if;
end;
else
select'No Exite Libro o Lector'Aviso;   
end if;
end;//


create trigger cambio 
after insert on prestamo
for each row
begin
if(new.estado='prestado') then
update libro
set existencia=existencia(-1);
elseif
update libro
set existencia=existencia(+1);
end if;
end;//
De antemano, muchas gracias y saludos.

Martin Raygoza "Ban Scorpio"
  #2 (permalink)  
Antiguo 25/09/2010, 05:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error 1305

El uso de paréntesis a continuación de un nombre es universalmente interpretado por todos los lenguajes (de programación o no) como llamada a una función con ese nombre.
Cuando pones
Cita:
existencia(-1)
, se interpreta que es la llamada a una función llamada existencia.
Para hacer lo que quieres debes eliminar esos paréntesis:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER cambio AFTER INSER ON prestamo
  3. IF NEW.estado='prestado' THEN
  4.     UPDATE libro
  5.     SET existencia = existencia -1;
  6.     UPDATE libro
  7.     SET existencia = existencia +1 ;
  8. END$$
  9. DELIMITER;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/09/2010, 13:44
Avatar de BanScorpio  
Fecha de Ingreso: septiembre-2010
Ubicación: Guadalajara, Jalisco, Mexico
Mensajes: 65
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Error 1305

Oh... Muchas gracias.
Crei que eso no afectaria.
Nuevamente, gracias

Etiquetas: disparadores, procedimiento
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 06:16.