Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2008, 04:17
ferola
 
Fecha de Ingreso: noviembre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 2
Funcion con dblink sin resultado :(

Hola. Tengo dos bases de datos en postgreSQL. Ambas bases de datos son idénticas, con el mismo número de tablas, y las tablas con la misma estructura.
Quiero hacer copias de algunas tablas y de algunos registros. Por ejemplo, de la tabla miTabla de la BD1, quiero copiar aquellos registros de código = '001' en la tabla miTabla de la BD2.

Para ello, siguiendo manuales e indicaciones, utilizo dblink, y he creado la siguiente función:

String cod = '001';
String miTabla = "elementosNaturales";
//tiene el mismo nombre y la misma estructura en la BD desde la que copio (BD1) y en la BD a la que escribo (BD2);

//conn es Connection sobre la BD1 (la que quiero leer y de la que quiero copiar)
Statement stmt1 = conn.createStatement();
stmt1.execute("CREATE OR REPLACE FUNCTION volcadoDatos() RETURNS void AS $$"
+"DECLARE "
+" fila RECORD;"
+"BEGIN"
+" SELECT dblink_connect('dbname = BD2 user = usuario password = 111111);"
+" FOR fila IN SELECT * FROM " + miTabla + " WHERE codigo= '" + cod+ "' LOOP"
+" SELECT dblink_exec('INSERT INTO "+ miTabla +" VALUES(fila)');"
+" END LOOP;"
+" SELECT dblink_disconnect();"
+"END;"
+"$$ LANGUAGE plpgsql;");

stmt1.close();


Me ejecuta todo, pero no copia nada en la tabla de BD2. Creo que el problema está en la línea:
+" SELECT dblink_exec('INSERT INTO "+ miTabla +" VALUES(fila)');"

Por hacer VALUES(fila) en vez de insertar campo a campo. Lo que pasa es que ambas tablas tienen la misma estructura, son totalmente idénticas, y con muchos campos. Además, ésta función la ejecutaré sobre varias tablas distintas, por lo que tiene que ser genérica. ¿Alguien sabe cómo puedo solucionarlo?

La llamada la hago así:

CallableStatement proc = conLec.prepareCall("{ ? = call volcadoDatos() }");

proc.execute();
proc.registerOutParameter(1, Types.OTHER);
proc.close();


Pero me muestra el siguiente mensaje de error: A CallableStatement Function was declared but no call to 'registerOutParameter (1, <some_type>)' was made.

Vamos, que estoy algo perdida, y ésto es muy importante para mi y no logro realizarlo. ¿Alguna ayuda?
Muchas gracias por adelantado!

Última edición por ferola; 09/06/2008 a las 04:19 Razón: habia errores