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

vector como argumento en una funcion

Estas en el tema de vector como argumento en una funcion en el foro de PostgreSQL en Foros del Web. Hola gente tengo una pequeña duda con funciones y me gustaria que me pudieran ayudar, tengo dos tablas Servicio y Factura. donde un o muchos ...
  #1 (permalink)  
Antiguo 30/12/2008, 00:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 12 años, 2 meses
Puntos: 0
vector como argumento en una funcion

Hola gente tengo una pequeña duda con funciones y me gustaria que me pudieran ayudar, tengo dos tablas Servicio y Factura. donde un o muchos servicios pertenecen a una factura.

lo que me gustaria lograr es un triger q cada vez q se inserte una tupla en la tabla factura, en la tabla servicio se asocie la pk de la tupla de factura a todos los servicios que esten relacionados.

asi seria el trigger.

CREATE TRIGGER inserta_fact_tri
AFTER INSERT
ON Factura
FOR EACH ROW
EXECUTE PROCEDURE insertar_pks_servicio (X,Y);

donde X vendria siendo la pk de la tupla de la tabla factura
donde Y vendria siendo el vector de PK's de la tabla servicio

me imagino que la funcion vendria siendo asi

(una especie de plpgsql con pseudocodigo xD)

CREATE OR REPLACE insertar_pks_servicio ( X, nose como declarar un vector)
RETURN VOID AS
$BODY$DECLARE
contador INTEGER := 0;

BEGIN

INICIO FOR
UPDATE servicio
SET fk_factura=X
WHERE id_servicio = vector[contador];
TERMINO FOR

END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;



Mi problema es como se entrega un vector como argumento ???
mi pregunta numero 2: seria posible tratar asi un vector ??

bueno de antemano muchas gracias y espero habeme dado a entender ...
  #2 (permalink)  
Antiguo 30/12/2008, 11:03
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: vector como argumento en una funcion

No entiendo porque quieres hacer esto asi.
Lo normal seria tener una tabla intermedia servicios_x_facturas que relacione los servicios con las facturas.
Revisa tu diseño o da más información

Salu2
  #3 (permalink)  
Antiguo 03/01/2009, 16:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: vector como argumento en una funcion

Cita:
Iniciado por seyko Ver Mensaje
No entiendo porque quieres hacer esto asi.
Lo normal seria tener una tabla intermedia servicios_x_facturas que relacione los servicios con las facturas.
Revisa tu diseño o da más información

Salu2
hola seyko lo que queria hacer ya lo logre programando mediante PHP y no pgplsql como queria :(

resulta q estoy haciendo un sistema para la asignatura base datos obviamente, y una nota se basa en aplicar plsql en el sistema de cada uno,ahora mi profesor es medio quisquilloso y ya que en el modelo estableci que la relacion factura con servicio es 1:N, no se justifica la creacion de una tabla intermedia.

el codigo en PHP (estoy programando en clases)

function IngresarFactura($datos_in, $datos_in2, $count){

for($i=0; $i<$count; $i=$i+1)
{
$sql="SELECT insertafactura($datos_in[0], $datos_in[1], $datos_in[2],$datos_in[3],$datos_in[4], $datos_in[5], $datos_in[6],$datos_in2[$i], $i)";


$this->id_consulta=pg_query($this->conexion,$sql);

}


donde datos_in es el vector que contiene los datos que iran a la tabla factura y datos_in2 es el vector con las ID's que se relacionaran con esa factura.

y mi funcion pgplsql es

CREATE OR REPLACE FUNCTION insertafactura(id_fac integer, dia_f integer, mes_f integer, ano_f integer, neto_f numeric, iva_f numeric, total_f numeric, id_serv integer, contador integer)
RETURNS void AS
$BODY$BEGIN
IF (contador = 0) THEN
insert into factura(id_factura,dia_fac,mes_fac,ano_fac,neto_fa c,iva_fac,total_fac,estado_fac)
values(id_fac,dia_f,mes_f,ano_f,neto_f,iva_f,total _f,'pendiente');
END IF;

UPDATE servicio
set id_factura=id_fac, pagoservicio='facturado'
where id_servicio=id_serv;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;


Bueno asi fue como lo resolvi, ahora si tu sabes como pasar un vector como argumento te agradeceria mucho

de antemano gracias...
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




La zona horaria es GMT -6. Ahora son las 12:55.