Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Insert con SP - avanzado (https://www.clubdelphi.com/foros/showthread.php?t=25209)

micayael 15-09-2005 17:26:07

Insert con SP - avanzado
 
Hola gente. Tengo un diseño de mi base de datos como muestro en la imagen.

Una persona puede ser Cliente, Proveedor, Funcioanario u otros tipos varios.

Vamos por el funcionario. Este puede ser o no un comisionista. Cuando llega al nivel de comisionista puede ser creativo (diseñador) o no.

Ahora, quiero hacer un Store procedure que inserte a estas personas. Que me conviene mas.

Hacer un SP por tipo de persona (cliente, funcionario, proveedor) o hacer un SP por tablas por ejemplo.

SP_ALTA_PERSONA : dara de alta la persona y si el tipo indica que es funcionario llamaria a SP_ALTA_FUNCIONARIO y si es comisionista SP_ALTA_COMISIONISTAS y asi sucesivamente.

Como podria yo hacer un rollback o algo que deshaga lo ingresado si es que ocurre un error al nivel de comisionista por ejemplo. Es decir ya se habra dado de alta en la tabla persona y en funcionario.


Neftali [Germán.Estévez] 15-09-2005 17:32:25

Cita:

Empezado por micayael
...Hacer un SP por tipo de persona (cliente, funcionario, proveedor) o hacer un SP por tablas por ejemplo...

Yo haría un SP por cada Tabla (uno simple) y luego uno para cada clase, de forma que no repitas código; Es decir el SP de cada tabla añade el registro a esa tabla y luego los SP de clase lo único que hacen es llamar a varios SP de tabla.

Cita:

Empezado por micayael
...Como podria yo hacer un rollback o algo que deshaga lo ingresado si es que ocurre un error al nivel de comisionista por ejemplo. Es decir ya se habra dado de alta en la tabla persona y en funcionario.

En los SP de Clase utiliza una única transacción y si algun SP de tabla falla deshaces todo el SP de clase.
Espero haberme explicado bien.
Se que funciona y bien, porque ésta misma estructura yo la utilizo, pero en Delphi, en lugar de con SP (Modelo de persistencia).

micayael 15-09-2005 19:33:47

Perfecto. Por lo que parece te la sabes todas neftali jeje.

Y hay forma de ejecutar el commit por programacion ?? o si se completa ya graba y listo?

Otra cosita cuando trato de llamar a otro sp desde un SP padre me da un error
que estaria mal? quizas no sea la forma adecuada de llamar. Da error en el select y con ; al final tambien. SP_PRUEBA1 no tiene parametros de entrada

CREATE PROCEDURE SP_PRUEBA2
AS
BEGIN
SELECT * FROM SP_PRUEBA1
END

micayael 15-09-2005 19:42:47

AH. dice que si no funciona deshago el SP de clase (que me imagino que es un SP normal que llama a los otros).

Como lo deshago tambien. Con un rollback, pero como invoco el rollback?

rastafarey 15-09-2005 21:02:18

Resp
 
El select que tienes lo debes hacer son un
Código SQL [-]
for select into
ese es el problema.

Y lo de deshacer no e snecesario ya que esto acurre solo por que va ligado en una misma transaccion. Lo que quiere decir que todo se ejecuta bien o no se ejecuta nada pero no a medias.

micayael 15-09-2005 21:45:13

AAH. PERO Y SI MI SP AL QUE LLAMO NO TIENE PARAMETRO DE SALIDA?
O TIENE QUE TENER SI O SI?

Pregunto por el select into. Por el into yo asigno a una variable el retorno del SP al que llamo.

rastafarey 27-09-2005 15:49:03

Resp
 
Solo ejecutas la intruccion sql es todo.


La franja horaria es GMT +2. Ahora son las 07:50:24.

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