POR FAVOR ALGUIEN ME AYUDA CON FUNCIONES EN SERVER 2000

29/10/2007 - 15:30 por ROBOTX | Informe spam
SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...

CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
DECLARE
nom usuarios.nombre%TYPE;
cat usuarios.categoria%TYPE;
nres usuarios.nlreservds%TYPE;
id usuarios.idu%TYPE;
libro libros.idl%TYPE;

BEGIN
id:=initcap($1);
libro:=initcap($2);
SELECT INTO nom * FROM usuarios WHERE idu=id;

IF NOT FOUND THEN
RAISE NOTICE ' USUARIO INEXISTENTE';
ELSE
RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
END IF;

IF nres=3 THEN
RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
ELSE
UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
END IF;

RETURN nom;
END;

LANGUAGE 'plpgsql' VOLATILE;


DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
libro como dato de entrada y que indique si el usuario dado puede
realizar un préstamo o una reservación

TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
RESERVACION. ESPERO PUEDAN AYUDARME...

Preguntas similare

Leer las respuestas

#1 jeastman - Hotmail
29/10/2007 - 18:16 | Informe spam
Hola ROBOTX.

Por lo que puedo ver, es la consulta que pusiste en otro hilo.

Solo tengo una pregunta, desde donde llamas ésta función?

De todos modos, yo personalmente para algo así hago un SP que quedaría más o
menos de la forma siguiente:

Te paso más o menos como queda, claro que ahora debes ver si es lo que
necesitas y pulirlo

Debes tener en cuenta algo, los SP solo pueden retornar valores del tipo
Int, si necesitas que se retorno un valor diferente a Int, tienes dos
opciones:

1. Hacer una función
2. Poner en el SP un parámetro agregando la clapsula output después del tipo
de datos:

ejemplo:

create proc SPnuevo
@id int,
@libro int,
@nom varchar(60) output
as

y luego en la llamada debes indicar que el parámetro es de retorno o salida

exec SPnuevo 1, 2, @variable output

Espero que ésto te sea de utilidad, cualquier cosa no dudes en pegar un
grito.

Saludos.


create proc SPnuevo
@id int,
@libro int
as
declare @nom varchar(60), -- tú defines el tipo y la longitud
@nres int

select @nom = nom,
@nres = nres -- no entendí como obtuviste el valor, espero que esto te
sirva
from usuario
where idu = id



if nom is null -- Al declararse una varialbe es null y si no se encuentra
sigue manteniendo el null
begin
raiserror( 'Usuario inexistente', 16, 1 )
return -1 -- ésto no es necesario, es mi estilo, lo puedo atrapar desde
otra parte para saber: -1 error, 0 bien
end

else
begin
como un error
o se muestra com un error
raiserror( 'Usuario encontrado %d', 16, 1, @nom ) -- ten cuidado con esto
end

if @nres = 3
begin
raiserror( 'No se puede realizar el préstamo', 16, 1 )
return -1
end

else
begin
update usuarios
set nlreservds = nlreservds + 1
where idu = id

end

return 0



"ROBOTX" escribió en el mensaje
news:
SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...

CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
DECLARE
nom usuarios.nombre%TYPE;
cat usuarios.categoria%TYPE;
nres usuarios.nlreservds%TYPE;
id usuarios.idu%TYPE;
libro libros.idl%TYPE;

BEGIN
id:=initcap($1);
libro:=initcap($2);
SELECT INTO nom * FROM usuarios WHERE idu=id;

IF NOT FOUND THEN
RAISE NOTICE ' USUARIO INEXISTENTE';
ELSE
RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
END IF;

IF nres=3 THEN
RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
ELSE
UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
END IF;

RETURN nom;
END;

LANGUAGE 'plpgsql' VOLATILE;


DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
libro como dato de entrada y que indique si el usuario dado puede
realizar un préstamo o una reservación

TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
RESERVACION. ESPERO PUEDAN AYUDARME...
Respuesta Responder a este mensaje
#2 ROBOTX
29/10/2007 - 22:57 | Informe spam
muchisimas gracias por la orientacion gracias a tu ayuda pude crear
mis procedimientos y la funcion que le comentaba
de hecho la funcion quedo asi:


CREATE proc prestar @idus int, @lib int
as
declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

declare @numcopy int
select @numcopy = numcop
from copias where idl = @lib

declare @num int
select @num = nlreservdv
from usuarios where idu = @idus

declare @libr int
select @libr = idl
from libro where idl=@lib

declare @nres int
select @nres = nreserv
from libro where idl = @lib

if (@cat = 'externo')
begin
if(@numcopy <= 2)
begin
if (@nres < 3 and @num < 3)
begin
print @nomb+ 'ES' + @cat
print 'no puede hacer prestamo, ni reseevaciones del libro'
print 'Numero de reservaciones es='
print @nres
print 'total de libros prestados ='
print @num
end
else
begin
if(@nres = 3 or @num = 3)
begin

print @nomb+ ' ES ' + @cat
print 'No puede hacer prestamo, ni reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end/*numcop<=2)*/
else/***/
begin
if(@nres < 3 and @num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres<3 num<3)*/
else/**/
begin
if(@nres = 3 or @num = 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres=3,num=3)*/
end/**/
end/***/
end/*EXTERNO*/
else
begin
if(@nres < 3 )
begin
if(@nres < 3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
else
begin
if(@num = 3 and @nres < 3)
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, pero si puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*num=3,nres<3*/
else
begin
if(@nres = 3 and @num = 3 )
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, tampoco reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*=3,=3*/
else
begin
if(@nres =3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end
end
end /*nres<3*/
else
begin
if(@num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end;

GO


en verdad muchisimas gracias por la ayuda me fue de gran utilidad,
ahora si pido ejecutar o hacer una consulta quedaria asi:

exec prestar '12999','159';

y me devuelve el valor "NOMBRE DE LA PERSONA QUE PRESTA EL LIBRO,
EXTERNO, SI PUEDE HACER PRESTAMOS Y RESERVACIONES, NUMERO DE
RESERVACION= (CANTIDAD) Y NUMERO DE LIBROS PRESTADOS= (CANTIDAD)


EN SERIO MUCHISIMAS GRACIAS POR ORIENTARME . QUEDARON RESUELTAS
MUCHAS DE MIS DUDAS GRACIAS...

jeastman - Hotmail ha escrito:
Hola ROBOTX.

Por lo que puedo ver, es la consulta que pusiste en otro hilo.

Solo tengo una pregunta, desde donde llamas ésta función?

De todos modos, yo personalmente para algo así hago un SP que quedaría más o
menos de la forma siguiente:

Te paso más o menos como queda, claro que ahora debes ver si es lo que
necesitas y pulirlo

Debes tener en cuenta algo, los SP solo pueden retornar valores del tipo
Int, si necesitas que se retorno un valor diferente a Int, tienes dos
opciones:

1. Hacer una función
2. Poner en el SP un parámetro agregando la clapsula output después del tipo
de datos:

ejemplo:

create proc SPnuevo
@id int,
@libro int,
@nom varchar(60) output
as

y luego en la llamada debes indicar que el parámetro es de retorno o salida

exec SPnuevo 1, 2, @variable output

Espero que ésto te sea de utilidad, cualquier cosa no dudes en pegar un
grito.

Saludos.


> create proc SPnuevo
@id int,
@libro int
as
declare @nom varchar(60), -- tú defines el tipo y la longitud
@nres int

select @nom = nom,
@nres = nres -- no entendí como obtuviste el valor, espero que esto te
sirva
from usuario
where idu = id



if nom is null -- Al declararse una varialbe es null y si no se encuentra
sigue manteniendo el null
begin
raiserror( 'Usuario inexistente', 16, 1 )
return -1 -- ésto no es necesario, es mi estilo, lo puedo atrapar desde
otra parte para saber: -1 error, 0 bien
end

else
begin
como un error
o se muestra com un error
raiserror( 'Usuario encontrado %d', 16, 1, @nom ) -- ten cuidado con esto
end

if @nres = 3
begin
raiserror( 'No se puede realizar el préstamo', 16, 1 )
return -1
end

else
begin
update usuarios
set nlreservds = nlreservds + 1
where idu = id

end

return 0

>

"ROBOTX" escribió en el mensaje
news:
SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...

CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
DECLARE
nom usuarios.nombre%TYPE;
cat usuarios.categoria%TYPE;
nres usuarios.nlreservds%TYPE;
id usuarios.idu%TYPE;
libro libros.idl%TYPE;

BEGIN
id:=initcap($1);
libro:=initcap($2);
SELECT INTO nom * FROM usuarios WHERE idu=id;

IF NOT FOUND THEN
RAISE NOTICE ' USUARIO INEXISTENTE';
ELSE
RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
END IF;

IF nres=3 THEN
RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
ELSE
UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
END IF;

RETURN nom;
END;

LANGUAGE 'plpgsql' VOLATILE;


DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
libro como dato de entrada y que indique si el usuario dado puede
realizar un préstamo o una reservación

TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
RESERVACION. ESPERO PUEDAN AYUDARME...
Respuesta Responder a este mensaje
#3 jeastman - Hotmail
29/10/2007 - 23:38 | Informe spam
Hola ROBOTX...

Te puedo hacer una recomendación adicional

Lo que has escrito así:

declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

lo puedes resumir de la forma siguiente:

declare @nomb varchar(50),
@cat varchar(50)

select @nomb = nombre, @cat = categoria
from usuarios where idu = @idus

La razón, solicitas una sola vez a SQL que consulte el esquema de la tabla y
los dos campos vendrán del mismo registro.

Saludos

"ROBOTX" escribió en el mensaje
news:
muchisimas gracias por la orientacion gracias a tu ayuda pude crear
mis procedimientos y la funcion que le comentaba
de hecho la funcion quedo asi:


CREATE proc prestar @idus int, @lib int
as
declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

declare @numcopy int
select @numcopy = numcop
from copias where idl = @lib

declare @num int
select @num = nlreservdv
from usuarios where idu = @idus

declare @libr int
select @libr = idl
from libro where idl=@lib

declare @nres int
select @nres = nreserv
from libro where idl = @lib

if (@cat = 'externo')
begin
if(@numcopy <= 2)
begin
if (@nres < 3 and @num < 3)
begin
print @nomb+ 'ES' + @cat
print 'no puede hacer prestamo, ni reseevaciones del libro'
print 'Numero de reservaciones es='
print @nres
print 'total de libros prestados ='
print @num
end
else
begin
if(@nres = 3 or @num = 3)
begin

print @nomb+ ' ES ' + @cat
print 'No puede hacer prestamo, ni reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end/*numcop<=2)*/
else/***/
begin
if(@nres < 3 and @num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres<3 num<3)*/
else/**/
begin
if(@nres = 3 or @num = 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres=3,num=3)*/
end/**/
end/***/
end/*EXTERNO*/
else
begin
if(@nres < 3 )
begin
if(@nres < 3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
else
begin
if(@num = 3 and @nres < 3)
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, pero si puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*num=3,nres<3*/
else
begin
if(@nres = 3 and @num = 3 )
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, tampoco reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*=3,=3*/
else
begin
if(@nres =3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end
end
end /*nres<3*/
else
begin
if(@num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end;

GO


en verdad muchisimas gracias por la ayuda me fue de gran utilidad,
ahora si pido ejecutar o hacer una consulta quedaria asi:

exec prestar '12999','159';

y me devuelve el valor "NOMBRE DE LA PERSONA QUE PRESTA EL LIBRO,
EXTERNO, SI PUEDE HACER PRESTAMOS Y RESERVACIONES, NUMERO DE
RESERVACION= (CANTIDAD) Y NUMERO DE LIBROS PRESTADOS= (CANTIDAD)


EN SERIO MUCHISIMAS GRACIAS POR ORIENTARME . QUEDARON RESUELTAS
MUCHAS DE MIS DUDAS GRACIAS...

jeastman - Hotmail ha escrito:
Hola ROBOTX.

Por lo que puedo ver, es la consulta que pusiste en otro hilo.

Solo tengo una pregunta, desde donde llamas ésta función?

De todos modos, yo personalmente para algo así hago un SP que quedaría más
o
menos de la forma siguiente:

Te paso más o menos como queda, claro que ahora debes ver si es lo que
necesitas y pulirlo

Debes tener en cuenta algo, los SP solo pueden retornar valores del tipo
Int, si necesitas que se retorno un valor diferente a Int, tienes dos
opciones:

1. Hacer una función
2. Poner en el SP un parámetro agregando la clapsula output después del
tipo
de datos:

ejemplo:

create proc SPnuevo
@id int,
@libro int,
@nom varchar(60) output
as

y luego en la llamada debes indicar que el parámetro es de retorno o
salida

exec SPnuevo 1, 2, @variable output

Espero que ésto te sea de utilidad, cualquier cosa no dudes en pegar un
grito.

Saludos.


> create proc SPnuevo
@id int,
@libro int
as
declare @nom varchar(60), -- tú defines el tipo y la longitud
@nres int

select @nom = nom,
@nres = nres -- no entendí como obtuviste el valor, espero que esto te
sirva
from usuario
where idu = id



if nom is null -- Al declararse una varialbe es null y si no se encuentra
sigue manteniendo el null
begin
raiserror( 'Usuario inexistente', 16, 1 )
return -1 -- ésto no es necesario, es mi estilo, lo puedo atrapar desde
otra parte para saber: -1 error, 0 bien
end

else
begin
interpreta
como un error
aplicación
o se muestra com un error
raiserror( 'Usuario encontrado %d', 16, 1, @nom ) -- ten cuidado con esto
end

if @nres = 3
begin
raiserror( 'No se puede realizar el préstamo', 16, 1 )
return -1
end

else
begin
update usuarios
set nlreservds = nlreservds + 1
where idu = id

end

return 0

>

"ROBOTX" escribió en el mensaje
news:
SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...

CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
DECLARE
nom usuarios.nombre%TYPE;
cat usuarios.categoria%TYPE;
nres usuarios.nlreservds%TYPE;
id usuarios.idu%TYPE;
libro libros.idl%TYPE;

BEGIN
id:=initcap($1);
libro:=initcap($2);
SELECT INTO nom * FROM usuarios WHERE idu=id;

IF NOT FOUND THEN
RAISE NOTICE ' USUARIO INEXISTENTE';
ELSE
RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
END IF;

IF nres=3 THEN
RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
ELSE
UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
END IF;

RETURN nom;
END;

LANGUAGE 'plpgsql' VOLATILE;


DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
libro como dato de entrada y que indique si el usuario dado puede
realizar un préstamo o una reservación

TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
RESERVACION. ESPERO PUEDAN AYUDARME...
Respuesta Responder a este mensaje
#4 ROBOTX
30/10/2007 - 22:17 | Informe spam
Hola JEASTMAN muchisimas gracias lo tomare en cuenta, pero sabes,
ahora i maestra me salio con algo mas bonito le entregue mi base de
datos con los problemas que pidio, ya sabes Triggers, funciones,
cursores, y ciclos, bueno todo iba bien cuando nos dice bueno
muchachos ahora quiero que me conecten la base de datos que tienen
pero no la de server si no la de Postgres, con Netbeans, haciendo la
conexion, y despues buscando la interfaz.

como vez????
digo tu crees que pudieses explicarme algo del tema, obviamente
investigare y leere lo mas que pueda pero me gustaria alguien me
instruyera. te lo agradeceria mucho mas de loq ue estoy agradecido
contigo...


bueno por ultimo solo me resta darte las gracias porque con el
comentario que me diste sobre la funcion me fue mas facil en serio
muchas gracias..

y disculpa por pedir mas favores jejeje disculpa la abusives..
bueno cuidate ...
jeastman - Hotmail ha escrito:
Hola ROBOTX...

Te puedo hacer una recomendación adicional

Lo que has escrito así:

declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

lo puedes resumir de la forma siguiente:

declare @nomb varchar(50),
@cat varchar(50)

select @nomb = nombre, @cat = categoria
from usuarios where idu = @idus

La razón, solicitas una sola vez a SQL que consulte el esquema de la tabla y
los dos campos vendrán del mismo registro.

Saludos

"ROBOTX" escribió en el mensaje
news:
muchisimas gracias por la orientacion gracias a tu ayuda pude crear
mis procedimientos y la funcion que le comentaba
de hecho la funcion quedo asi:


CREATE proc prestar @idus int, @lib int
as
declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

declare @numcopy int
select @numcopy = numcop
from copias where idl = @lib

declare @num int
select @num = nlreservdv
from usuarios where idu = @idus

declare @libr int
select @libr = idl
from libro where idl=@lib

declare @nres int
select @nres = nreserv
from libro where idl = @lib

if (@cat = 'externo')
begin
if(@numcopy <= 2)
begin
if (@nres < 3 and @num < 3)
begin
print @nomb+ 'ES' + @cat
print 'no puede hacer prestamo, ni reseevaciones del libro'
print 'Numero de reservaciones es='
print @nres
print 'total de libros prestados ='
print @num
end
else
begin
if(@nres = 3 or @num = 3)
begin

print @nomb+ ' ES ' + @cat
print 'No puede hacer prestamo, ni reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end/*numcop<=2)*/
else/***/
begin
if(@nres < 3 and @num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres<3 num<3)*/
else/**/
begin
if(@nres = 3 or @num = 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres=3,num=3)*/
end/**/
end/***/
end/*EXTERNO*/
else
begin
if(@nres < 3 )
begin
if(@nres < 3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
else
begin
if(@num = 3 and @nres < 3)
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, pero si puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*num=3,nres<3*/
else
begin
if(@nres = 3 and @num = 3 )
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, tampoco reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*=3,=3*/
else
begin
if(@nres =3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end
end
end /*nres<3*/
else
begin
if(@num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end;

GO


en verdad muchisimas gracias por la ayuda me fue de gran utilidad,
ahora si pido ejecutar o hacer una consulta quedaria asi:

exec prestar '12999','159';

y me devuelve el valor "NOMBRE DE LA PERSONA QUE PRESTA EL LIBRO,
EXTERNO, SI PUEDE HACER PRESTAMOS Y RESERVACIONES, NUMERO DE
RESERVACION= (CANTIDAD) Y NUMERO DE LIBROS PRESTADOS= (CANTIDAD)


EN SERIO MUCHISIMAS GRACIAS POR ORIENTARME . QUEDARON RESUELTAS
MUCHAS DE MIS DUDAS GRACIAS...

jeastman - Hotmail ha escrito:
> Hola ROBOTX.
>
> Por lo que puedo ver, es la consulta que pusiste en otro hilo.
>
> Solo tengo una pregunta, desde donde llamas ésta función?
>
> De todos modos, yo personalmente para algo así hago un SP que quedaría más
> o
> menos de la forma siguiente:
>
> Te paso más o menos como queda, claro que ahora debes ver si es lo que
> necesitas y pulirlo
>
> Debes tener en cuenta algo, los SP solo pueden retornar valores del tipo
> Int, si necesitas que se retorno un valor diferente a Int, tienes dos
> opciones:
>
> 1. Hacer una función
> 2. Poner en el SP un parámetro agregando la clapsula output después del
> tipo
> de datos:
>
> ejemplo:
>
> create proc SPnuevo
> @id int,
> @libro int,
> @nom varchar(60) output
> as
>
> y luego en la llamada debes indicar que el parámetro es de retorno o
> salida
>
> exec SPnuevo 1, 2, @variable output
>
> Espero que ésto te sea de utilidad, cualquier cosa no dudes en pegar un
> grito.
>
> Saludos.
>
>
> > > create proc SPnuevo
> @id int,
> @libro int
> as
> declare @nom varchar(60), -- tú defines el tipo y la longitud
> @nres int
>
> select @nom = nom,
> @nres = nres -- no entendí como obtuviste el valor, espero que esto te
> sirva
> from usuario
> where idu = id
>
>
>
> if nom is null -- Al declararse una varialbe es null y si no se encuentra
> sigue manteniendo el null
> begin
> raiserror( 'Usuario inexistente', 16, 1 )
> return -1 -- ésto no es necesario, es mi estilo, lo puedo atrapar desde
> otra parte para saber: -1 error, 0 bien
> end
>
> else
> begin
> interpreta
> como un error
> aplicación
> o se muestra com un error
> raiserror( 'Usuario encontrado %d', 16, 1, @nom ) -- ten cuidado con esto
> end
>
> if @nres = 3
> begin
> raiserror( 'No se puede realizar el préstamo', 16, 1 )
> return -1
> end
>
> else
> begin
> update usuarios
> set nlreservds = nlreservds + 1
> where idu = id
>
> end
>
> return 0
>
> > >
>
> "ROBOTX" escribió en el mensaje
> news:
> SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
> AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
> PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
> PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...
>
> CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
> DECLARE
> nom usuarios.nombre%TYPE;
> cat usuarios.categoria%TYPE;
> nres usuarios.nlreservds%TYPE;
> id usuarios.idu%TYPE;
> libro libros.idl%TYPE;
>
> BEGIN
> id:=initcap($1);
> libro:=initcap($2);
> SELECT INTO nom * FROM usuarios WHERE idu=id;
>
> IF NOT FOUND THEN
> RAISE NOTICE ' USUARIO INEXISTENTE';
> ELSE
> RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
> END IF;
>
> IF nres=3 THEN
> RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
> ELSE
> UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
> RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
> END IF;
>
> RETURN nom;
> END;
>
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
> libro como dato de entrada y que indique si el usuario dado puede
> realizar un préstamo o una reservación
>
> TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
> RESERVACION. ESPERO PUEDAN AYUDARME...
Respuesta Responder a este mensaje
#5 jeastman - Hotmail
30/10/2007 - 23:14 | Informe spam
Hermano con el mayor gusto del mundo te ayudaría, pero hasta ahora es que
estoy empezando a leer sobre postgresql y Netbeans, nada de nada, de lo
contrario de verdad te ayudaría.

Por favor, si alguien del grupo sabe a donde se puede dirigir el compañero,
una mano, que aqui si me quedé más corto que en los otros casos
:-(

Lo lamento viejo.

Saludos.

"ROBOTX" escribió en el mensaje
news:
Hola JEASTMAN muchisimas gracias lo tomare en cuenta, pero sabes,
ahora i maestra me salio con algo mas bonito le entregue mi base de
datos con los problemas que pidio, ya sabes Triggers, funciones,
cursores, y ciclos, bueno todo iba bien cuando nos dice bueno
muchachos ahora quiero que me conecten la base de datos que tienen
pero no la de server si no la de Postgres, con Netbeans, haciendo la
conexion, y despues buscando la interfaz.

como vez????
digo tu crees que pudieses explicarme algo del tema, obviamente
investigare y leere lo mas que pueda pero me gustaria alguien me
instruyera. te lo agradeceria mucho mas de loq ue estoy agradecido
contigo...


bueno por ultimo solo me resta darte las gracias porque con el
comentario que me diste sobre la funcion me fue mas facil en serio
muchas gracias..

y disculpa por pedir mas favores jejeje disculpa la abusives..
bueno cuidate ...
jeastman - Hotmail ha escrito:
Hola ROBOTX...

Te puedo hacer una recomendación adicional

Lo que has escrito así:

declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

lo puedes resumir de la forma siguiente:

declare @nomb varchar(50),
@cat varchar(50)

select @nomb = nombre, @cat = categoria
from usuarios where idu = @idus

La razón, solicitas una sola vez a SQL que consulte el esquema de la tabla
y
los dos campos vendrán del mismo registro.

Saludos

"ROBOTX" escribió en el mensaje
news:
muchisimas gracias por la orientacion gracias a tu ayuda pude crear
mis procedimientos y la funcion que le comentaba
de hecho la funcion quedo asi:


CREATE proc prestar @idus int, @lib int
as
declare @nomb varchar(50)
select @nomb = nombre
from usuarios where @idus = idu

declare @cat varchar(50)
select @cat = categoria
from usuarios where idu = @idus

declare @numcopy int
select @numcopy = numcop
from copias where idl = @lib

declare @num int
select @num = nlreservdv
from usuarios where idu = @idus

declare @libr int
select @libr = idl
from libro where idl=@lib

declare @nres int
select @nres = nreserv
from libro where idl = @lib

if (@cat = 'externo')
begin
if(@numcopy <= 2)
begin
if (@nres < 3 and @num < 3)
begin
print @nomb+ 'ES' + @cat
print 'no puede hacer prestamo, ni reseevaciones del libro'
print 'Numero de reservaciones es='
print @nres
print 'total de libros prestados ='
print @num
end
else
begin
if(@nres = 3 or @num = 3)
begin

print @nomb+ ' ES ' + @cat
print 'No puede hacer prestamo, ni reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end/*numcop<=2)*/
else/***/
begin
if(@nres < 3 and @num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres<3 num<3)*/
else/**/
begin
if(@nres = 3 or @num = 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*nres=3,num=3)*/
end/**/
end/***/
end/*EXTERNO*/
else
begin
if(@nres < 3 )
begin
if(@nres < 3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo y reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
else
begin
if(@num = 3 and @nres < 3)
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, pero si puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*num=3,nres<3*/
else
begin
if(@nres = 3 and @num = 3 )
begin
print @nomb+ ' ES ' + @cat
print 'no puede hacer prestamo, tampoco reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end/*=3,=3*/
else
begin
if(@nres =3 and @num < 3)
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end
end
end /*nres<3*/
else
begin
if(@num < 3 )
begin
print @nomb+ ' ES ' + @cat
print 'si puede hacer prestamo, pero no puede hacer reservaciones'
print 'Numero de reservaciones ='
print @nres
print 'Total de libros prestados ='
print @num
end
end
end;

GO


en verdad muchisimas gracias por la ayuda me fue de gran utilidad,
ahora si pido ejecutar o hacer una consulta quedaria asi:

exec prestar '12999','159';

y me devuelve el valor "NOMBRE DE LA PERSONA QUE PRESTA EL LIBRO,
EXTERNO, SI PUEDE HACER PRESTAMOS Y RESERVACIONES, NUMERO DE
RESERVACION= (CANTIDAD) Y NUMERO DE LIBROS PRESTADOS= (CANTIDAD)


EN SERIO MUCHISIMAS GRACIAS POR ORIENTARME . QUEDARON RESUELTAS
MUCHAS DE MIS DUDAS GRACIAS...

jeastman - Hotmail ha escrito:
> Hola ROBOTX.
>
> Por lo que puedo ver, es la consulta que pusiste en otro hilo.
>
> Solo tengo una pregunta, desde donde llamas ésta función?
>
> De todos modos, yo personalmente para algo así hago un SP que quedaría
> más
> o
> menos de la forma siguiente:
>
> Te paso más o menos como queda, claro que ahora debes ver si es lo que
> necesitas y pulirlo
>
> Debes tener en cuenta algo, los SP solo pueden retornar valores del tipo
> Int, si necesitas que se retorno un valor diferente a Int, tienes dos
> opciones:
>
> 1. Hacer una función
> 2. Poner en el SP un parámetro agregando la clapsula output después del
> tipo
> de datos:
>
> ejemplo:
>
> create proc SPnuevo
> @id int,
> @libro int,
> @nom varchar(60) output
> as
>
> y luego en la llamada debes indicar que el parámetro es de retorno o
> salida
>
> exec SPnuevo 1, 2, @variable output
>
> Espero que ésto te sea de utilidad, cualquier cosa no dudes en pegar un
> grito.
>
> Saludos.
>
>
> > > create proc SPnuevo
> @id int,
> @libro int
> as
> declare @nom varchar(60), -- tú defines el tipo y la longitud
> @nres int
>
> select @nom = nom,
> @nres = nres -- no entendí como obtuviste el valor, espero que esto te
> sirva
> from usuario
> where idu = id
>
>
>
> if nom is null -- Al declararse una varialbe es null y si no se
> encuentra
> sigue manteniendo el null
> begin
> raiserror( 'Usuario inexistente', 16, 1 )
> return -1 -- ésto no es necesario, es mi estilo, lo puedo atrapar desde
> otra parte para saber: -1 error, 0 bien
> end
>
> else
> begin
> interpreta
> como un error
> aplicación
> o se muestra com un error
> raiserror( 'Usuario encontrado %d', 16, 1, @nom ) -- ten cuidado con
> esto
> end
>
> if @nres = 3
> begin
> raiserror( 'No se puede realizar el préstamo', 16, 1 )
> return -1
> end
>
> else
> begin
> update usuarios
> set nlreservds = nlreservds + 1
> where idu = id
>
> end
>
> return 0
>
> > >
>
> "ROBOTX" escribió en el mensaje
> news:
> SABEN SOY NUEVO EN SQL-SERVER 2000 Y QUIERO VER SI ALGUIEN ME PUEDE
> AYUDAR SOBRE COMO HACRE FUNCIONES DE HECHO ESTOY INTENTANDOLO
> PORQUE YA TENGO EL CODIGO EN POSTGRES, PERO LAMENTABLEMENTE NO PUEDO
> PASARLO A SERVER, DE HECHO MI CODIGO EN POSTGRES QUEDA ASI...
>
> CREATE OR REPLACE FUNCTION nuevo(int, int) RETURNS text AS
> DECLARE
> nom usuarios.nombre%TYPE;
> cat usuarios.categoria%TYPE;
> nres usuarios.nlreservds%TYPE;
> id usuarios.idu%TYPE;
> libro libros.idl%TYPE;
>
> BEGIN
> id:=initcap($1);
> libro:=initcap($2);
> SELECT INTO nom * FROM usuarios WHERE idu=id;
>
> IF NOT FOUND THEN
> RAISE NOTICE ' USUARIO INEXISTENTE';
> ELSE
> RAISE NOTICE ' USUARIO ENCONTRADO %',nom;
> END IF;
>
> IF nres=3 THEN
> RAISE NOTICE 'NO PUEDE REALIZAR EL PRESTAMO';
> ELSE
> UPDATE usuarios SET nlreservds=nlreservds + 1 WHERE idu=id;
> RAISE NOTICE 'PUEDE REALIZAR PRESTAMO';
> END IF;
>
> RETURN nom;
> END;
>
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> DE HECHO ESTE CODIGO ME Define un operador que tome a un usuario y aún
> libro como dato de entrada y que indique si el usuario dado puede
> realizar un préstamo o una reservación
>
> TENIENDO EN LA BASE DE DATOS TABLAS LIBRO, USUARIOS, PRESTAMOS Y
> RESERVACION. ESPERO PUEDAN AYUDARME...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida