Riutilizzo stored proceduresAllo stesso modo che è possibile creare tag personalizzati da frammenti di codice ColdFusion e quindi chiamare questi tag personalizzati da ColdFusion altri modelli, si può fare praticamente la stessa cosa con le stored procedure. Le stored procedure possono chiamare altri stored procedure più o meno allo stesso modo che essi sono chiamati da ColdFusion, ma senza il tag-based interface. Diciamo, per esempio, che avete una stored procedure, sp_GetInventoryItem, che recupera una riga InventoryItem sulla base del valore ItemNumber passato . Si utilizza sp_GetInventoryItem tutta l'applicazione di e-commerce per ottenere informazioni sul prodotto, come gli utenti sfogliare il catalogo, e si utilizza anche per recuperare gli elementi di inventario per il lavoro amministrativo. Ora si vuole integrare sp_GetInventoryItem con un'altra stored procedure-sp_DiscountItem-che sconti il prezzo di un prodotto a seconda che l'utente inserisce un codice valido coupon di sconto, all'inizio della sua sessione di shopping. È possibile ripetere il codice per recuperare la voce di inventario e di effettuare lo sconto in ogni stored procedure che richiede una tale funzione, oppure si può effettuare la manutenzione del codice più facile da spezzare esempi di codice in comune le proprie procedure e chiedendo loro se necessario, come mostrato nel codice. - Questa procedura verrà chiamato da sp_DiscountItem CREATE PROCEDURE sp_GetInventoryItem (@ giiItemNumber varchar (15), @ giiDescription varchar (40) OUTPUT, @ giiUnitPrice numerico (12,2) OUTPUT, @ giiAvailableToSell Integer OUTPUT, @ giiComments varchar (200) OUTPUT ) AS SELECT @ giiDescription = Description, @ giiUnitPrice = UnitPrice, @ giiAvailableToSell = AvailableToSell, @ giiComments = Commenti InventoryItem DA DOVE ItemNumber = @ return giiItemNumber go - Questa procedura sarà inoltre chiamato da sp_DiscountItem CREATE PROCEDURE sp_GetAmountDue (@ Couponcode varchar (16), @ AmountDue numerico (12,2) OUTPUT) AS DECLARE @ Bit Redenti, @ PercentDiscount numerica (12,2 ) SELECT @ Redenti = Redenti, @ PercentDiscount = PercentDiscount DA DOVE Coupon Couponcode = @ Couponcode IF (@ @ ROWCOUNT! = 1) BEGIN RETURN - Coupon non esiste, nessun cambiamento di prezzo END IF (@ Redenti = 1) BEGIN RETURN - Coupon già redento, senza variazione di prezzo END ELSE BEGIN SELECT @ AmountDue = @ AmountDue * (1 - @ PercentDiscount / 100) return end go - Questa è la procedura che il genitore è chiamato sp_DiscountItem CREATE PROCEDURE (@ diCouponCode varchar (16) , @ diItemNumber varchar (15), @ diDescription varchar (40) OUTPUT, @ diUnitPrice numerico (12,2) OUTPUT, @ diAvailableToSell Integer OUTPUT, @ diComments varchar (200) OUTPUT) AS sp_GetInventoryItem EXEC ( @ @ giiItemNumber = diItemNumber, giiDescription = @ @ diDescription OUTPUT, @ giiAvailableToSell giiUnitPrice = @ diUnitPrice OUTPUT, @ = @ OUTPUT diAvailableToSell, giiComments = @ @ diComments OUTPUT) sp_GetAmountDue EXEC (@ Couponcode = @ diCouponCode, AmountDue = @ @ OUTPUT diUnitPrice) RETURN go
La prima volta che abbiamo mai codificato una cosa del genere, le nostre teste quasi diviso spalancate dalla confusione! Quale parametro è l'ingresso a cui uscita, e come questo un passaggio indietro a quello e così via? Bene, finalmente abbiamo trovato un modo di spiegare una procedura utilizzando i parametri di OUTPUT che chiamare un altro in un modo che abbia senso. Si trova un file di Adobe Acrobat chiamato parametro di output Tracing.pdf, che contiene l'elenco di precedenti ripetuta una volta per ogni fase del processo di passaggio dei parametri, insieme con un diagramma per ogni passo e una spiegazione in parole povere di quanto sta accadendo in ogni passaggio. Seguiamo uno di questi parametri OUTPUT-the-UnitPrice nel suo viaggio completo attraverso tutte le stored procedure che ne fanno uso e mostrare come i valori vengono acquisiti e passati tra i parametri. Vivamente consigliamo di dedicare qualche minuto per aprire tale documento e seguire ogni le fasi del processo. Veramente sfruttare le stored procedure nelle vostre applicazioni ColdFusion, è necessario comprendere a fondo questo argomento complicato. Abbiamo ripetuto la descrizione piana inglese di ogni passo nel seguente elenco numerato, ma avendo il diagramma a portata di mano, come si legge li aiuta veramente. Il processo inizia con tutte le sp_DiscountItem procedura che viene chiamato da ColdFusion come segue: 1. sp_DiscountItem è la prima stored procedure chiamata. Il parametro @ output diUnitPrice inizia con un valore NULL; a questo punto, @ diUnitPrice è solo un secchio "vuoto" per ricevere un valore di ritorno da sp_DiscountItem dopo che termina l'esecuzione e poi tornare, che il valore per l'applicazione client. OUTPUT sp_DiscountItem dice, "Se fare qualcosa per il valore di @ diUnitPrice durante la vostra esecuzione, OUTPUT il suo valore nuovo indietro nel @ diUnitPrice in modo che il nuovo valore può essere usato da qualsiasi applicazione o procedura ti ha chiamato." Se @ diUnitPrice non hanno la qualifica di uscita, rimarrebbe NULL dopo sp_DiscountItem terminato l'esecuzione. 2. @ diUnitPrice è il valore inviato al parametro @ OUTPUT giiItemUnitPrice della chiamata alla sp_GetInventoryItem. Adesso, è ancora solo un valore NULL. 3. @ giiUnitPrice inizializza con il valore NULL forniti da @ diUnitPrice ed è ora pronto a chiamare sp_GetInventoryItem. 4. sp_GetInventoryItem ora si chiama con @ giiUnitPrice come parametro di OUTPUT. Essa contiene ancora un valore NULL. E 'solo lavoro, a questo punto è quello di fornire un secchio vuoto in cui sp_GetInventoryItem potrebbero tradursi in un valore. 5. Dopo sp_GetInventoryItem esegue, si seleziona il valore della colonna di InventoryItem.UnitPrice nel parametro OUTPUT @ giiUnitPrice. 6. @ giiUnitPrice contiene ora il prezzo unitario recuperato dalla voce di inventario, piuttosto che un valore NULL. 7. @ GiiUnitPrice perché è un parametro di output nella sp_GetInventoryItem, il nuovo valore è destinato ad essere nuovamente in @ giiUnitPrice sp_DiscountItem dentro, che ha appena chiamato sp_GetInventoryItem. 8. Questo nuovo valore di @ giiUnitPrice è ulteriormente OUTPUT indietro nel parametro @ diUnitPrice che originariamente alimentato il valore NULL per @ giiUnitPrice, perché @ diUnitPrice ha il qualificatore OUTPUT nella chiamata a sp_GetInventoryItem. Ora @ diUnitPrice contiene lo stesso valore restituito da sp_GetInventoryItem. 9. Ora avete il valore non attualizzato prezzo unitario dal record memorizzati nella voce di inventario @ diUnitPrice, e si può alimentare questo valore per sp_GetAmountDue per una possibile riduzione dei prezzi. 10. @ AmountDue viene inizializzata con il valore memorizzato in @ diUnitPrice ed è ora pronto a chiamare sp_GetAmountDue. 11. sp_GetAmountDue ora si chiama con @ AmountDue come parametro di OUTPUT. Esso contiene attualmente il prezzo per unità di valore restituito dal record voce di inventario. 12. sp_GetAmountDue può o non può modificare il valore memorizzato in @ AmountDue, ma se lo fa, il valore modificato viene ripristinato in @ AmountDue. 13. @ AmountDue perché è un parametro di output nella sp_GetAmountDue, il nuovo valore è destinato ad essere nuovamente in @ AmountDue sp_DiscountItem dentro, che ha appena chiamato sp_GetAmountDue. 14. Questo nuovo valore di @ AmountDue è ulteriormente OUTPUT indietro nel parametro @ diUnitPrice che originariamente alimentato il valore non modificato prezzo per unità di @ AmountDue, perché @ diUnitPrice ha il qualificatore OUTPUT nella chiamata a sp_GetAmountDue. Now @ diUnitPrice contiene il (forse) unità di modifica il valore restituito da sp_GetAmountDue prezzo. 15. @ DiUnitPrice perché è un parametro di output nella sp_DiscountItem, @ diUnitPrice può emettere il suo finale, eventualmente modificato il valore per l'applicazione ColdFusion che lo ha chiamato in primo luogo. un articolo presentato da Michael Patterson Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni. Importante: Questo articolo "Riutilizzare stored procedures" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.
|
|||||
| Online: 231 users browsing the articles directory |
|
|