PDA

Ver la Versión Completa : SELECT INTO en más de una estructura


Abaunus
14/10/09, 17:37:48
Hola amigos, deseo hacer lo siguiente, pero ya me estoy disuadiendo de que no se puede:

Teniedo
W_VBAP TYPE VBAP,
W_VBAK TYPE VBAK.

SELECT SINGLE * FROM VBAP AS a INNER JOIN VBAK AS b ON
( a~VBELN EQ b~VBELN ) INTO (W_VBAP, W_VBACK) WHERE a~VBELN EQ V_VGBEL AND a~POSNR EQ V_VGPOS.

Necesito que el INTO sean dos estructras. Sé que entre paréntesis se puede poner una secuencia de campos, pero así con estructuras no me está funcionando. ¿Es posible hacer un INTO en más de una estructura a la vez?

Espero se entiendo.
Desde ya, gracias, y saludos a todos.

mysmb2
14/10/09, 18:32:28
hola compañero

podrias recuperar en una estructura y luego copiarlo a la otra estructura.
Ahora si lo que necestias es recuperar dos registros diferentes tenes que hacer un select up to 2 rows.

Abaunus
14/10/09, 18:43:00
hola compañero

podrias recuperar en una estructura y luego copiarlo a la otra estructura.
Ahora si lo que necestias es recuperar dos registros diferentes tenes que hacer un select up to 2 rows.

Claro, pero lo que yo necesito no es son dos estructuras iguales o dos registros.
Necesito un solo registro (SELECT SINGLE), pero en dos estructuras distintas, una por cada tabla del INNER JOIN (VBAP y VBAK).

martin89
14/10/09, 19:18:21
Hola amigos, deseo hacer lo siguiente, pero ya me estoy disuadiendo de que no se puede:

Teniedo
W_VBAP TYPE VBAP,
W_VBAK TYPE VBAK.

SELECT SINGLE * FROM VBAP AS a INNER JOIN VBAK AS b ON
( a~VBELN EQ b~VBELN ) INTO (W_VBAP, W_VBACK) WHERE a~VBELN EQ V_VGBEL AND a~POSNR EQ V_VGPOS.

Necesito que el INTO sean dos estructras. Sé que entre paréntesis se puede poner una secuencia de campos, pero así con estructuras no me está funcionando. ¿Es posible hacer un INTO en más de una estructura a la vez?

Espero se entiendo.
Desde ya, gracias, y saludos a todos.


Tu select es a la tabla VBAP, es decir vas a traer los registros de esa tabla. Lo que vos le indicas con el inner join es que te traiga los registros que en coincidan con tu WHERE. Es decir (que el campo VBELN de la tabla VBAP sea igual al campo V_VGBEL de la tabla VBACK.. lo mismo para el campo POSNR y V_VGPOS).

Para traer registros de dos tablas distintas lo único que te queda es hacer dos selects me parece. Puede que esté equivocado si es así por favor corregirme.

Saludos y espero que te ayude

Abaunus
14/10/09, 20:29:45
Tu select es a la tabla VBAP, es decir vas a traer los registros de esa tabla. Lo que vos le indicas con el inner join es que te traiga los registros que en coincidan con tu WHERE. Es decir (que el campo VBELN de la tabla VBAP sea igual al campo V_VGBEL de la tabla VBACK.. lo mismo para el campo POSNR y V_VGPOS).

Para traer registros de dos tablas distintas lo único que te queda es hacer dos selects me parece. Puede que esté equivocado si es así por favor corregirme.

Saludos y espero que te ayude


Cuando hacés INNER JOIN podés traer cualquier (todos, o los que quieras) registro de las tablas involucradas, no sólo de la primera. Eso no es problema. El tema es saber si puedo poner en INTO más de una estructura, como sí se puede poner más de un campo, dentro del paréntesis separados por comas.

abapconsultoria
14/10/09, 20:37:35
Hola amigos, deseo hacer lo siguiente, pero ya me estoy disuadiendo de que no se puede:

Teniedo
W_VBAP TYPE VBAP,
W_VBAK TYPE VBAK.

SELECT SINGLE * FROM VBAP AS a INNER JOIN VBAK AS b ON
( a~VBELN EQ b~VBELN ) INTO (W_VBAP, W_VBACK) WHERE a~VBELN EQ V_VGBEL AND a~POSNR EQ V_VGPOS.

Necesito que el INTO sean dos estructras. Sé que entre paréntesis se puede poner una secuencia de campos, pero así con estructuras no me está funcionando. ¿Es posible hacer un INTO en más de una estructura a la vez?

Espero se entiendo.
Desde ya, gracias, y saludos a todos.


Lo que pedis no se puede hacer. Solo tolera hacerlo con campos.

Saludos.

ballan
15/10/09, 09:06:18
Podrias hacer algo asi:

Types: begin of ty_vbak_vbap.

include structure vbak as k renaming with suffix _vbak.
include structure vbap as p renaming with suffix _vbap.

types: end of ty_vbak_vbap.

data: gs_vbak_vbap type ty_vbak_vbap,
gs_vbak type vbak,
gs_vbap type vbap.

select single *
into gs_vbak_vbap
from vbak as k inner join vbap as p
on k~vbeln = p~vbeln
where ...

move-corresponding gs_vbak_vbap to gs_vbak.
move-corresponding gs_vbak_vbap to gs_vbap.

Los campos comunes entre vbak y vbap tendras que mapearlos a mano pero sera mas sencillo

Espero que ayude

Abaunus
15/10/09, 16:52:28
¡¡Gracias Ballan!! El SELECT funcionó a la perfección, no así los MOVE-CORRESPONDING, ya que los campos de las estructuras gs_vbak y gs_vbap no tiene los sufijos, por lo tanto sus nombres difieren de gs_vbak_vbap...


No entendí esto:
Los campos comunes entre vbak y vbap tendras que mapearlos a mano pero sera mas sencillo

De nuevo, gracias, y saludos!

Emanuel