A eso es que me refería, siempre tengo que indicar cada columna que voy a retornar de una u otra forma y es bastante tedioso cuando tienes funciones que retornan hasta 50 columnas.
A lo que me refiero es si no hay forma de evitar eso como en SQL server donde solo haces: create funtion prueba(codcia varchar(2)) returns table as return(select t1.campo01,t2.campo05 from t1 inner join t2 on ti.id=t2.id2) en postgres obligatoriamente tendria que hacer: create or replace funtion prueba(codcia varchar(2)) returns table(campo01 integer,campo05 text) as $BODY$ return query select t1.campo01,t2.campo05 from t1 inner join t2 on ti.id =t2.id2; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; o me puedo evitar la definición de columnas??? El 5 de septiembre de 2013 11:24, Miguel Angel Hernandez Moreno < [email protected]> escribió: > Hola > > creao que tienes que hacer el > > select * from act_depre_cuentas('01'); > as > (campo01 tipo_dato01, campo02 tipo_dato02, ... , campoN tipo_datoN) > > > o lo que puedes hacer es > > > > CREATE OR REPLACE FUNCTION act_depre_cuentas(codcia character varying(2)) > RETURNS TABLE(campo01 tipo_dato01, campo02 tipo_dato02, ... , campoN > tipo_datoN) AS > > > ................... > ...................... > > end; > $BODY$ > LANGUAGE plpgsql VOLATILE > COST 100; > > > > Asi lo resolvi alguna vez, espero te pueda servir > > Saludos > > > > El 5 de septiembre de 2013 10:19, Dario Andres Almonte Alonzo < > [email protected]> escribió: > > buen día lista >> >> estoy migrando una base de datos de sql server 2005 a postgres 9.2.4,ya >> he pasando las funciones que retornan valores escalares sin ningún problema. >> >> ahora estoy empezando a migrar las funciones que retornan conjuntos de >> registros y me he encontrado con un problema, me dice que debo definir cada >> columna que voy a retornar. >> >> esta es la primera función que intente migrar: >> >> CREATE OR REPLACE FUNCTION act_depre_cuentas(codcia character varying(2)) >> RETURNS setof record AS >> $BODY$ >> begin >> >> return query SELECT codcia_hed,substring(referen1_hed from 11 for 6) as >> codart_act, cnttran.idTran_hed, cnttran.modulo_hed, cnttran.codent_hed, >> cnttran.referen1_hed, >> cnttran.fecha_hed, cnttran.concep_hed, cnttran.monto_hed, >> cntdeta.numcta_det, >> cntdeta.centro_det, cntdeta.debito_det, >> cntdeta.credito_det, cntdeta.debcre_det, >> (select nomcta_cat from cntcatal where codcia_cat=codcia_hed and >> numcta_cat=numcta_det) as cuenta, >> (select descri_act from actmaes where codcia_act=codcia_hed and >> codart_act= substring(referen1_hed from 11 for 6)) as activo, >> (select descri_dep from actdepa where codcia_dep=codcia_hed and >> coddep_dep=(select coddep_act from actmaes where codcia_act=codcia_hed and >> codart_act= substring(referen1_hed from 11 for 6)) ) as departamento, >> (select descri_tip from acttipo where codcia_tip=codcia_hed and >> tipact_tip=(select tipart_act from actmaes where codcia_act=codcia_hed and >> codart_act= substring(referen1_hed from 11 for 6)))as tipo, >> (select coddep_act from actmaes where codcia_act=codcia_hed and >> codart_act= substring(referen1_hed from 11 for 6)) as coddep_act, >> (select tipart_act from actmaes where codcia_act=codcia_hed and >> codart_act= substring(referen1_hed from 11 for 6)) as tipart_act >> FROM cntdeta INNER JOIN >> cnttran ON cntdeta.codcia_det = cnttran.codcia_hed >> AND cntdeta.idTrand_det = cnttran.idTran_hed >> where modulo_hed='ACT' and codent_hed='C' and codcia_hed = codcia; >> >> end; >> $BODY$ >> LANGUAGE plpgsql VOLATILE >> COST 100; >> >> cuando la creo el resultado es: Query returned successfully with no >> result in 13 ms. >> >> pero cuando la llamo: >> select * from act_depre_cuentas('01'); >> >> el resultado es: >> ERROR: la lista de definición de columnas es obligatoria para funciones >> que retornan «record» >> SQL state: 42601 >> Character: 15 >> >> He estado buscando en foros y me dicen que debo definir cada parámetro en >> el RETURNS o crear un type personalizado con todos los registros que quiero >> retornar. >> >> Hacer esto me tomaría muchísimo tiempo ya que tengo funciones que >> retornan querys con muchísimas columnas. >> >> Mi pregunta es,¿Hay alguna forma de retornar el query sin tener que >> definir todas las columnas?? >> > > > > -- > ISC Miguel Angel Hernandez Moreno >
