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
Ir a la versión completa