Hola Ariel, Francisco:

Si bien los que seguimos esta lista sabemos la IMHO de Ariel sobre los foros, y con su permiso seria bueno cerrar la consulta que se abrió en el foro sobre este tema. La contibución de Ariel (excelente como siempre) cierra muy bien este tema según he visto. Si no tienes problema Ariel hago un copy paste al foro con las referencias correspondientes.
Espero tu respuesta.
Marcelo


Ariel Constenla-Haile escribió:
Hola Francisco,

Francisco Martagón Gordillo escribió:
Intento volcar a una tabla el producto cartesiano de otras dos, ya
saben, cuando se combinan dos tablas que no están relacionadas y se
obtienen por tanto el nº de registros que resulta de multiplicar los
registros de una tabla origen por la otra.

Para hacer el volcado he creado una consulta que funciona sin problemas,
pero cuando quiero usar esa consulta en una instrucción INSERT INTO para
que añada a una tabla los registros resultante de esa consulta me dice
que no encuentra la tabla que lleva el nombre de la consulta (¡claro, no
encuentra la tabla porque el origen no es una tabla, es una consulta).

una consulta es simplemente una instrucción SELECT que existe sólo del
lado del cliente, el servidor (ya sea HSQLDB embebido, o un RDBMS
externo) no sabe nada de su existencia. Por ende, no puedes, en *este*
caso, emplear el nombre de la consulta en una instrucción SQL como si
fuera el nombre de una tabla.

En otros casos, OOo Base permite "simular" que empleas el nombre,
reemplazando el nombre de la consulta por su instrucción SQL *antes* de
enviar el comando al servidor.

Si "Consulta_EDAD" es una consulta, la siguiente instrucción SQL
funciona perfectamente (siempre que no selecciones el modo "SQL
directo", en el cual OOo Base *no* parsea la instrucción antes de
enviarla al servidor/driver):

SELECT * FROM "Consulta_EDAD" ORDER BY "apellido" DESC;


Pero la instrucción INSERT debes ejecutarla desde el diálogo
"Herramientas" - "SQL", en el cual las instrucciones son enviadas
directamente al RDBMS sin ser interpretadas antes por OOo; por ende, el
RDBMS no sabe que ese nombre se refiere a una consulta (por otra parte,
jamás podría acceder al contenido [= la instrucción SELECT] de la misma,
pues las consultas son objectos que existen del lado del cliente.


Como solución podrías reemplazar, en la instrucción INSERT INTO ..., el
nombre de la consulta por la instrucción SELECT que constituye la misma,
quedando un enunciado anidado

INSERT INTO ( filed1, field2 ) (SELECT filed1, field2 FROM (SELECT ...))

Otra solución es crear un vista, en vez de una consulta.

Saludos
Ariel.






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a