09/06/2008, 04:17
|
| | Fecha de Ingreso: noviembre-2006
Mensajes: 199
Antigüedad: 18 años, 1 mes 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
|