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...
 

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...

Preguntas similares