Ir al contenido


Foto

Ayuda con Store procedure


  • Por favor identifícate para responder
7 respuestas en este tema

#1 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 febrero 2009 - 06:43

Hola compañeros del foro, nesecito ayuda por favor con lo siguiente, tengon un procediemiento en Firebird 2.1 así­:


sql
  1. CREATE  PROCEDURE MiProcedure ( pfecha DATE, pdirector INTEGER)
  2. RETURNS (Salida INTEGER)
  3. AS
  4. DECLARE variable vfecha DATE;
  5. BEGIN
  6. SELECT MAX(FECHA_CORTE)
  7. FROM cuentas_directores
  8. WHERE ID_DIRECTOR = :pdirector
  9. INTO :vfecha;
  10. IF (pfecha <= VFECHA) THEN
  11. Salida = 0 ;
  12. ELSE
  13. Salida = 1 ;
  14. END^



Quiero utilizar el valor de salida en un Trigger para hacer algo como:



sql
  1. IF salida = 1 THEN
  2. /*algo*/
  3. ELSE
  4. /* algo*/



Cual es la sintaxis para recuperar el valor de salida de el procedimiento desde el Trigger?

Gracias por su tiempo y ayuda.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 febrero 2009 - 07:44

Saludos.

Lo que planteas no es posible realizarlo en Firebird (creo que en ningún motor), si quieres hacer una operación con un valor x desde un Trigger este debe de ser un campo de la tabla o un valor obtenido a través de un calculo pero como quiera implica que sea de un campo de la tabla.

Tienes dos opciones (a mi entender), claro esta, que teniendo el campo creado en la tabla:

1.- Haces un SP con tus operaciones y luego de este ejecutarse tener un Trigger según la operación (Insert, Update, Delete).

2.- Tener un Trigger y dependiendo del valor almacenado ejecutar un SP.

Saludos.




  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 febrero 2009 - 08:02

Gracias Rolphy por contestar, quizá no me expliqué bien, trataré de hacerlo mejor; dado el  Procedimiento en cuestión mi pregunta concreta es: Es posible asignar el valor de salida del procedure a la variable "vi" del siguiente Trigger:


sql
  1. CREATE TRIGGER miTrigger FOR Mitabla
  2. ACTIVE INSERT UPDATE POSITION 0
  3. AS
  4. DECLARE variable vi INTEGER;
  5. BEGIN
  6. /*Quiero asignar el valor de salida del procedure a la variable "vi"*/
  7. /* y luego hacer una operación por ejemplo:*/
  8. IF OLD.campo = vi THEN
  9. /*algo*/
  10.  
  11. END



Gracias  Saludos
  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 febrero 2009 - 08:35

Saludos.

Si quieres obtener/asignar un valor a esa variable del Trigger, debes de ejecutar el SP ya mencionado desde el Trigger y con tu parámetro de retorno asignarlo a la variable.

Si explicaras mejor lo que quieres hacer, serí­a más fácil, trata de explicarte sin los códigos que tienes sino la idea perce (no se como se escribe  :( ) y hay le buscamos la vuelta.

Hasta luego.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 febrero 2009 - 09:14

Per Sé

Saludos.
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 febrero 2009 - 09:17

debes de ejecutar el SP ya mencionado desde el Trigger y con tu parámetro de retorno asignarlo a la variable.


Lo que acabas de mencionar es exactamente lo que quiero hacer pero no conozco la sintaxis exacta,¿Podrí­as colaborarme con un pequeño y sencillo  ejemplo?

Mil gracias por tu interés.
Saludos
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 febrero 2009 - 11:36

Saludos.

Procedimiento:



sql
  1. CREATE OR ALTER PROCEDURE SUMAR_CANTIDAD (
  2.     EMP_NUM INTEGER)
  3. RETURNS (
  4.     CANTIDAD INTEGER)
  5. AS
  6. BEGIN
  7.   /* Procedure Text */
  8.   SELECT SUM(po_number)
  9.     FROM sales
  10.     WHERE sales_rep = :emp_num
  11.     INTO :CANTIDAD;
  12.   suspend;
  13. END



Ahora el Trigger quedarí­a así­:



sql
  1. CREATE OR ALTER TRIGGER SALES_AIU_SUMAR_VENTA FOR SALES
  2. ACTIVE AFTER INSERT OR UPDATE POSITION 0
  3. AS
  4. DECLARE variable VCAN INTEGER;
  5. BEGIN
  6.   /* Trigger text */
  7.   EXECUTE PROCEDURE SUMAR_CANTIDAD(NEW.SALES_REP) RETURNING_VALUES :VCAN;
  8.   IF (:VCAN > 0) THEN
  9.   BEGIN
  10.   --DoSomething
  11.   END
  12.   ELSE
  13.   BEGIN
  14.   --DoNothing
  15.   END
  16. END



Hasta luego.
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 febrero 2009 - 01:12

Gracias Rolphy,  eso era lo que necesitaba.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.