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

Ayuda con FUNCION para insertar o actualizar registros

Estas en el tema de Ayuda con FUNCION para insertar o actualizar registros en el foro de SQL Server en Foros del Web. Antes que nada les envio un saludo a todos y ojalá que me puedan apoyar en un problema que tengo. Les explico, antes había trabajado ...
  #1 (permalink)  
Antiguo 11/06/2010, 17:43
 
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Ayuda con FUNCION para insertar o actualizar registros

Antes que nada les envio un saludo a todos y ojalá que me puedan apoyar en un problema que tengo. Les explico, antes había trabajado con PostgreSQL programando funciones y todo muy bien, pero ahora que me paso a SQL Server 2005 tengo algunas broncas. En lo que necesito que me ayuden es en lo siguiente: tengo una función programada en PL/pgSQL (Procedural Language/PostgreSQL) que sirve para insertar (si el valor del primer parámetro es 0) y actualizar (si el valor del primer parámetro es diferente de 0 y actualiza por medio de este, ya que se refiere al ID de la tabla y de no existir manda un error) que es el siguiente:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION tel.spimabipa (INTEGER, VARCHAR, VARCHAR) RETURNS text
  2. AS $proc$
  3. DECLARE
  4.     vid_abipa ALIAS FOR $1;
  5.     vabreva ALIAS FOR $2;
  6.     vipa ALIAS FOR $3;
  7.     vretval text;
  8. BEGIN
  9.     IF (vid_abipa=0) THEN
  10.         INSERT INTO tel.tb_abipa (id_abipa, abreva, ipa)
  11.             VALUES (NEXTVAL('tel.seqabipa'), vabreva, vipa);
  12.         vretval:='Valores insertados con exito';
  13.     ELSE
  14.         UPDATE tel.tb_abipa
  15.             SET abreva=vabreva, ipa=vipa               
  16.             WHERE id_abipa=vid_abipa;
  17.         IF NOT (FOUND) THEN
  18.             vretval:='Error: algun dato es incorrecto';
  19.         ELSE
  20.             vretval:='Valores actualizados con exito';
  21.         END IF;
  22.     END IF;
  23.     RETURN vretval;
  24. END; $proc$
  25. LANGUAGE 'plpgsql';

El primer problema es que no tengo ni idea como traducir la parte ALIAS FOR, esto lo que hace es meter en variables lo parámetros de la función.
Y lo segundo que que no se cuál es la equivalencia de IF NOT (FOUND) THEN.

En verdad si alguien me pudiera echar la mano les estaría muy agradecido. Y por cierto si alguien tiene problemas con PostgreSQL yo les podría ayudar en algo, ya llevo un buen tiempo trabajando con esa base de datos.

Última edición por joluro_50; 14/06/2010 a las 11:55 Razón: Código SQL
  #2 (permalink)  
Antiguo 12/06/2010, 12:15
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: Ayuda con FUNCION para insertar o actualizar registros

Código SQL:
Ver original
  1. CREATE FUNCTION tel_spimabipa (@vid_abipa INT, @vabreva VARCHAR(50), @vipa VARCHAR(50)) RETURNS VARCHAR(50)
  2. BEGIN
  3.  
  4. DECLARE @vretval VARCHAR(50)
  5.  
  6. IF @vid_abipa = 0
  7. BEGIN
  8.     INSERT INTO tel..tb_abipa (id_abipa, abreva, ipa)
  9.     VALUES (NEXTVAL('tel.seqabipa'), @vabreva, @vipa)
  10.     SET @vretval = 'Valores insertados con exito'
  11. END
  12. ELSE
  13. BEGIN
  14.     UPDATE tel..tb_abipa
  15.     SET abreva = @vabreva, ipa = @vipa             
  16.     WHERE id_abipa = @vid_abipa
  17.  
  18.     IF NOT (FOUND)
  19.         SET @vretval = 'Error: algun dato es incorrecto'
  20.     ELSE
  21.         SET @vretval = 'Valores actualizados con exito'
  22.  
  23. END
  24.  
  25. RETURN @vretval
  26.  
  27. END
Que hace IF NOT (FOUND)?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 14/06/2010, 11:44
 
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Ayuda con FUNCION para insertar o actualizar registros

Funciona como una bandera booleana, para verfificar el estado de la ejecución de una sentencia SQL, en este caso si la ejecución del UPDATE devuelve FALSE la operación NO se completó satisfactoriamente, si devuelve TRUE la operacion se completó satistaftoriamente. Es por eso que se manda el error si el UPDATE no fue éxitoso.

Muchas gracias por tu respuesta.

Etiquetas: funcion, registros
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:15.