Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda con Stored Procedure (https://www.clubdelphi.com/foros/showthread.php?t=48490)

gluglu 26-09-2007 11:54:34

Ayuda con Stored Procedure
 
Hola a tod@s !

Estoy atascado con mi primer Stored Procedure y necesito vuestra ayuda.

Tengo un Stored Procedure que he comprobado funciona correctamente con una llamada individual.

Código SQL [-]
Select V_1, V_2, V_3 from MiStoredProcedure(1,2,3,4,5)

El Stored Procedure espera 5 parámetros de entrada y devuelve 3 de salida.

Ahora quiero incluir este procedimiento en un Select de una tabla, que es para lo que en teoría lo necesito. Y no sé como hacerlo. La consulta podría ser algo así como :

Código SQL [-]
Select T1.A, T1.B, V_1, V_2, V_3 from TABLA1 T1
y aquí es donde no sé como invocar al Stored Procedure con los 5 parámetros de la propia TABLA1 que tengo que pasar a MiStoredProcedure para que me devuelva los valores V_1, V_2 y V_3 para cada uno de los registros de TABLA1.

Lo que quiero es que MiStoredProcedure se ejecute para cada registro de TABLA1 y me devuelva los valores del resultado en la consulta Select para cada registro.

Espero haberme explicado correctamente.

Gracias por vuestra ayuda.

duilioisola 26-09-2007 12:20:11

prueba lo siguiente y dime si funciona:
Código SQL [-]
select T1.A,T1.B, SP.V_1,SP.V_2,SP.V_3 from TABLA1 T1
join MiStoredProcedure(1,2,3,4,5)
los parámetros 1,2,3,4 y 5, podrían ser campos de la tabla T1
Código SQL [-]
select T1.A,T1.B, SP.V_1,SP.V_2,SP.V_3 from TABLA1 T1
join MiStoredProcedure(T1.A,T1.B,T1.C,T1.D,T1.E)

gluglu 26-09-2007 12:36:02

Gracias por contestar. No, no me funciona. Tengo una condición Where adicional al final de la consulta y me da error precisamente en la palabra 'where'.

He seguido indagando y de momento lo consigo de esta manera :

Código SQL [-]
Select T1.A, T1.B, T1.C,
(Select V_1
 from MISTOREDPROCEDURE(T1.A, T1.B, T1.C, T1.D, T1.E)),
(Select V_2
 from MISTOREDPROCEDURE(T1.A, T1.B, T1.C, T1.D, T1.E)),
(Select V_3
 from MISTOREDPROCEDURE(T1.A, T1.B, T1.C, T1.D, T1.E)),
from TABLA1 T1
where T1.CONDICION = DATO

No sé si es la manera ideal de conseguir mi objetivo. A lo mejor alguien sabe de una solución mejor y probablemente más correcta. :o

duilioisola 26-09-2007 13:05:38

Se me olvidó que el procedimiento tiene que tener un alias (SP)...
Quizás ese sea el problema.
Código SQL [-]
select T1.A,T1.B, SP.V_1,SP.V_2,SP.V_3 from TABLA1 T1
join MiStoredProcedure(1,2,3,4,5) SP
where T1.CONDICION = DATO
De todos modos, la solución que has encontrado me parece correcta.
Si lo que expongo funciona, fíjate cual es la más rápida, óptima y "más mejor" :D

gluglu 26-09-2007 13:10:19

También lo probé con un alias para el Stored Procedure.

Lo que pasa es que no me permite pasar los parámetros como valores tomados de la TABLA1. :(

Lepe 26-09-2007 13:33:19

Sería conveniente saber las tablas, los campos y realmente para qué lo necesitas.

Yo esos V_1, V_2, etc se los pasaba directamente al SP, o bien hacía que el SP devuelva todas las columnas del registro, ya después solo pillaba los que me interase.

Saludos

gluglu 26-09-2007 14:20:53

Cachis, 20 minutos escribiendo una explicación detallada a Lepe, y al final me dá error al postear y se me ha perdido toda la explicación ... :mad:


La franja horaria es GMT +2. Ahora son las 18:18:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi