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

#6 ROBOTX
09/11/2007 - 06:59 | Informe spam
hola Jeastman, muchisimas gracias por responder y pues ni modo aun no
e investigado sobre la conexion pero sabes ahora la maestrita jeje me
pide hacer reglas o rules, acercioneso acertion y dominios o domains,
en server tu crees que mepuedas guiar??? en seiro muchisimas gracias
por toda la ayuda propotcionada ah y no habia podido escribirte porque
no habia netrado ya desde hace una semana vale gracias de nuevo
cuidate
jeastman - Hotmail ha escrito:
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...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida