Bueno pues toco hacerlo como me indic Miguel Angel Hernadez CREATE OR REPLACE FUNCTION act_depre_cuentas(codcia character varying(2)) RETURNS TABLE(campo01 tipo_dato01, campo02 tipo_dato02, ... , campoN tipo_datoN) AS
Así funciona perfecto Gracias a todos por sus rápidas respuestas El 5 de septiembre de 2013 12:05, Miguel Angel Hernandez Moreno < [email protected]> escribió: > Si retornas la tabla > > > CREATE FUNCTION getDatos() > RETURNS NOMBRE_TABLA > LANGUAGE sql > AS $_$ > select id, texto from prueba; > $_$; > > > Aqui yo uso el lenguaje SQL y no el PLPGSQL > > > El 5 de septiembre de 2013 10:42, Dario Andres Almonte Alonzo < > [email protected]> escribió: > > Si esa opción ya la había visto. >> >> Lo que quería saber es si se podía retornar la tabla sin tener que >> definir nada, igual que en SQL Server para ahorrar algo de tiempo ya que >> son muchísimas funciones. >> >> >> >> El 5 de septiembre de 2013 11:39, Juan >> <[email protected]>escribió: >> >> Holas >>> >>> >>> Se me ocurrre si creas un tipo con los nombres y tipos de tu salida, >>> podriasa poner as setof MyTypo >>> y problema solucionado, ojo!!! especulo, no lo probé. >>> >>> salu2 >>> jmdc >>> >>> 2013/9/5 Dario Andres Almonte Alonzo <[email protected]>: >>> > 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 >>> > >>> > >>> >> >> > > > -- > ISC Miguel Angel Hernandez Moreno >
