Bases de Datos > PostgreSQL

 POBLEMAS CON RETORNOS DE FUNCIONES

(1/1)

omar125-02:
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:
Que tal,

por como veo, el punto puede estar aqui

defines un :

--- Código: Java --- ResultSet rs;  
y le quieres asignar un:


--- Código: SQL --- CREATE OR REPLACE FUNCTION usp_tipoasociado(didtipoas INTEGER, dtipoasociado CHARACTER) RETURNS tipoasociado AS  
intenta de este modo


--- Código: SQL ---  CREATE OR REPLACE FUNCTION usp_tipoasociado(didtipoas INTEGER)RETURNS setof tipoasociado AS$BODY$BEGINSELECT TipoAsociadoFROM tipoasociadoWHERE(Id_TipoAsociado=didtipoas);END;$BODY$LANGUAGE 'plpgsql'   
ya que lo que andas buscando es un objeto tipo datatable, y es posible que te este devolviendo otra cosa.

suerte! :hola:

omar125-02:
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 **********

Navegación

[0] Índice de Mensajes

Ir a la versión completa