Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2013, 14:38
Avatar de lucy87
lucy87
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 13 años
Puntos: 0
funcion con varios inserts

Buen día!!

Necesito de su amable ayuda :)

Soy nueva en oracle, así que hay q tenerme paciencia :P

Tengo una aplicación que registra empleados, para esto en la tabla de datos generales (tbl_rh_cv_datos_grales) se almacena la información del empleado como fecha de nacimiento, numero de hijos, correos, iddomicilio etc, y en otra tabla se almacena su domicilio (tbl_rh_cv_domicilio) ahora, ya que todo esto se hace desde la misma pantalla, estoy pensando en hacer una función en lugar de hacer 2 inserts diferentes...
Ya una vez había trabajado con una función en postgresql que recibía los parámetros, los metía en variables y comenzaba con los inserts.. x ejemplo, primero hacia el insert en la tabla de domicilio y a otra variable le asignaba el id que se insertaba, y cuando inserta en la tabla de datos generales (dentro de la misma función) le envía el id del domicilio guardado.

Ahora, estas funciones las se hacer en postgresql, pero en Oracle no tengo ni la minima idea de como :( hay alguien que tenga un ejemplito por ahí en el que me pueda basar??

esta es la función como la hacia en postgresql por si es que no me explique bien... muchas gracias!!

Código SQL:
Ver original
  1. CREATE FUNCTION prospectos_insert(CHARACTER VARYING, INTEGER, INTEGER, INTEGER,
  2. CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, INTEGER, INTEGER, CHARACTER
  3.  VARYING, text, CHARACTER VARYING, CHARACTER VARYING, INTEGER) RETURNS catalogoprospectos
  4.     LANGUAGE plpgsql
  5.     AS $_$DECLARE
  6.  
  7.     Resultado   catalogoprospectos%rowtype;
  8.    
  9.     r_idprospecto      INTEGER;
  10.     r_idpersona        INTEGER;
  11.     r_id_tel       INTEGER;
  12.     r_idtipotelefono   INTEGER;
  13.    
  14.     p_prospecto     CHARACTER VARYING:=$1;
  15.     p_idgiro        INTEGER      :=$2;
  16.     p_idlocalidad       INTEGER      :=$3;
  17.     p_idestatus     INTEGER      :=$4;
  18.     p_nombre        CHARACTER VARYING:=$5;
  19.     p_paterno       CHARACTER VARYING:=$6;
  20.     p_materno           CHARACTER VARYING:=$7;
  21.     p_lada          INTEGER      :=$8; 
  22.     p_telefono          INTEGER      :=$9; 
  23.     p_email         CHARACTER VARYING:=$10;
  24.     p_comentarios       text         :=$11;    
  25.     p_hashurl       CHARACTER VARYING:=$12;
  26.     p_periodo       CHARACTER VARYING:=$13;
  27.     p_creadopor     INTEGER      :=$14;
  28. BEGIN                
  29.     SELECT INTO r_idpersona idpersona FROM personas_insert(p_nombre,
  30.                                    p_paterno,
  31.                                    p_materno,
  32.                                    '?','',NULL,NULL,
  33.                                    p_creadopor) idpersona;
  34.      RAISE DEBUG 'r_idpersona=%', r_idpersona;
  35.                                    
  36.     INSERT INTO prospectos(idgiro, idcontacto, idlocalidad,
  37.                    idestatus, prospecto, email, comentarios,
  38.                    periodo,   hashurl,   creadopor)
  39.                    VALUES(p_idgiro,   r_idpersona,   p_idlocalidad,
  40.                   p_idestatus, p_prospecto,  p_email, p_comentarios,
  41.                   p_periodo,   p_hashurl,    p_creadopor);
  42.  
  43.     SELECT INTO r_idprospecto idprospecto FROM prospectos
  44.     WHERE prospecto=p_prospecto
  45.           AND idlocalidad=p_idlocalidad AND hashurl=p_hashurl AND creadopor=p_creadopor AND email=p_email;
  46.         IF NOT FOUND
  47.         THEN
  48.             RAISE EXCEPTION 'ERROR AL INSERTAR EL REGISTRO DE PROSPECTOS.';
  49.         END IF;
  50.     RAISE DEBUG 'r_idprospecto=%', r_idprospecto;
  51.  
  52.     SELECT INTO r_idtipotelefono  idcatalogomaestro FROM catalogomaestro WHERE  definicion='Telefono_De_Contacto';
  53.    
  54.     SELECT id INTO r_id_tel FROM telefonospersona_insert(r_idtipotelefono,p_lada,p_telefono,'teléfono de contacto para prospección',TRUE,r_idpersona) id;
  55.    
  56.     RAISE DEBUG 'r_id_tel=%', r_id_tel;
  57.    
  58.     SELECT INTO Resultado * FROM catalogoprospectos WHERE idprospecto=r_idprospecto;
  59.         IF NOT FOUND
  60.         THEN
  61.             RAISE EXCEPTION 'ERROR AL CORROBORAR REGISTRO DE PROSPECTOS.';
  62.         END IF;
  63.     RETURN Resultado;
  64. END
  65. $_$;
  66.  
  67.  
  68. ALTER FUNCTION public.prospectos_insert(CHARACTER VARYING, INTEGER, INTEGER,
  69. INTEGER, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, INTEGER, INTEGER,
  70.  CHARACTER VARYING, text, CHARACTER VARYING, CHARACTER VARYING, INTEGER) OWNER TO
  71.  postgres;


[/PHP]

Última edición por gnzsoloyo; 21/11/2013 a las 15:24 Razón: MUY mal etiquetado. SQL NO ES PHP.