• Viernes 29 de Marzo de 2024, 11:31

Autor Tema:  POBLEMAS CON RETORNOS DE FUNCIONES  (Leído 4144 veces)

omar125-02

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
POBLEMAS CON RETORNOS DE FUNCIONES
« en: Viernes 25 de Febrero de 2011, 19:49 »
0
hola, ayudenme please. tengo una funcion que quiero me retorne varios  de datos
-He creado una tabla "tipoasociado", con columnas: idtipoas, tipoasociado y estado
-he creado una funcion "usp_tipoasociado", la cual recibe parametro de entrada desde java para consultar:
-Entonces cundo la llamo desde java: me sale el siguiente mensaje:

ERROR:consulta no tiene un destino para los datos de resultado......

Para mas especificacion les pongo my funcion:

CREATE OR REPLACE FUNCTION usp_tipoasociado(didtipoas integer, dtipoasociado character)
RETURNS tipoasociado AS
$BODY$
BEGIN
SELECT TipoAsociado
FROM tipoasociado
where(Id_TipoAsociado=didtipoas);

end;$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION usp_tipoasociado(integer, character) OWNER TO postgres;


-Yo llamo my funcion desde java asi:
ItemsTipoAsociado=objeto.SeleccionarTodo("{call usp_tipoasociado(1,'A')}");
/////Este codigo llama al codigo sguiente:

public static String[] SeleccionarTodo(String parametros)
{
Connection con;
String resul[]=new String[60];
try
{
ResultSet rs;
Class.forName(Driver);
con=DriverManager.getConnection(CadenaCon,Usuario,Contrasena);
CallableStatement cs = con.prepareCall(parametros);
rs=cs.executeQuery();

int fil=0;
while(rs.next())
{
fil++;
resul[fil]=rs.getString(1);
fil++;
resul[fil]=rs.getString(2);
}
resul[0]=""+fil+"";
rs.close();
cs.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
tipo=JOptionPane.ERROR_MESSAGE;
JOptionPane.showMessageDialog((Component)null,"No se pudo llenar los datos de la lista.nDetalles: "+e.getMessage(),"Error",tipo);
}
return resul;
}

.¿QUE ESTOY HACIENDO MAL EN MI CONSULTA. ALGUIN ME AYUDE? o donde me falta un return.

Thanatos-chan

  • Miembro MUY activo
  • ***
  • Mensajes: 136
  • Nacionalidad: do
    • Ver Perfil
Re: POBLEMAS CON RETORNOS DE FUNCIONES
« Respuesta #1 en: Sábado 26 de Febrero de 2011, 02:10 »
0
Que tal,

por como veo, el punto puede estar aqui

defines un :
Código: Java
  1.  
  2.  
  3.  

y le quieres asignar un:

Código: SQL
  1.  
  2. CREATE OR REPLACE FUNCTION usp_tipoasociado(didtipoas INTEGER, dtipoasociado CHARACTER) RETURNS tipoasociado AS
  3.  
  4.  

intenta de este modo

Código: SQL
  1.  
  2.  
  3. CREATE OR REPLACE FUNCTION usp_tipoasociado(didtipoas INTEGER)
  4. RETURNS setof tipoasociado AS
  5. $BODY$
  6. BEGIN
  7. SELECT TipoAsociado
  8. FROM tipoasociado
  9. WHERE(Id_TipoAsociado=didtipoas);
  10. END;$BODY$
  11. LANGUAGE 'plpgsql'
  12.  
  13.  

ya que lo que andas buscando es un objeto tipo datatable, y es posible que te este devolviendo otra cosa.

suerte! :hola:
Que es un genio???? yo superare a un genio con trabajo duro, y eso es todo.

omar125-02

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
BUSCADOR EN POSTGRES
« Respuesta #2 en: Martes 22 de Marzo de 2011, 16:46 »
0
Hola. Tengo un procedimiento almacenado en MYSQL que me sirve para buscar datos. Este lo quiero pasar a POSTGRES pero en funciones.

• Este es el procedimiento en MSQL:
CREATE PROCEDURE `USP_Buscador` (op tinyint, Cad1 varchar(100),Cad2 varchar(100),Cad3 varchar(100),
Cad4 varchar(150))
BEGIN
DECLARE consultar varchar(500);
Case op
When 1 then
SET @consultar=CONCAT('SELECT * FROM ',Cad1,' WHERE Estado=0 AND ',Cad2,' LIKE '%',Cad3,'%' LIMIT 200');
End case;
PREPARE consultar FROM @consultar;
EXECUTE consultar;
End

• Ahora lo implemento en Postgres así, pero no se que poner en el return:
CREATE OR REPLACE FUNCTION USP_Buscador(op integer, Cad1 varchar(100),Cad2 varchar(100),Cad3 varchar(100),Cad4 varchar(150))

RETURNS Buscador AS
$BODY$
DECLARE consultar varchar(500);
BEGIN
case op
when 1 then
SET @consultar=CONCAT('SELECT * FROM ',Cad1,' WHERE Estado=0 AND ',Cad2,' ILIKE '%',Cad3,'%' LIMIT 200');

end case;
PREPARE consultar FROM @consultar;
EXECUTE consultar;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION USP_Buscador(integer, varchar(100), varchar(100), varchar(100), varchar(150)) OWNER TO postgres;

• Si ejecuto así en postgres me da un mensaje: Creo porque no hay una tabla así o no se pero en MSQL no me da problemas.

ERROR: no existe el tipo «buscador»

********** Error **********