PDA

Ver la Versión Completa : Insert con SP - avanzado


micayael
15-09-2005, 17:26:07
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.

http://www.granodemostaza.org/tmp/DER.gif

Neftali [Germán.Estévez]
15-09-2005, 17:32:25
...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.

...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
El select que tienes lo debes hacer son un 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
Solo ejecutas la intruccion sql es todo.