Reutilizando código de procedimento armazenado

Da mesma forma que você pode criar marcas personalizadas a partir de fragmentos de código ColdFusion e em seguida, chamar as tags personalizadas do ColdFusion outros modelos, você pode fazer praticamente a mesma coisa com procedimentos armazenados. Os procedimentos armazenados podem chamar outros procedimentos armazenados da mesma maneira que eles são chamados de ColdFusion, mas sem a tag-based interface. Digamos, por exemplo, que você tem um procedimento armazenado, sp_GetInventoryItem, que recupera uma linha InventoryItem com base no valor itemnumber passado . Você usa sp_GetInventoryItem todo o aplicativo de e-commerce para obter informações sobre o produto que os usuários navegar pelo catálogo, e você também usá-lo para recuperar itens do estoque para o trabalho administrativo. Agora você quer incorporar sp_GetInventoryItem com outro procedimento armazenado sp_DiscountItem-que os descontos no preço de um item com base em se o usuário digita um código de cupom de desconto válido no início de sua sessão de compras. Você pode repetir o código para recuperar o item de estoque e realizar o desconto em cada procedimento armazenado que requer tal função, ou você pode fazer manutenção de código mais fácil pela quebra exemplos de código comum em seus próprios procedimentos e chamá-los quando necessário, como mostrado no código.

- Este procedimento será chamado pelo sp_DiscountItem sp_GetInventoryItem CREATE PROCEDURE (@ giiItemNumber VARCHAR (15), @ giiDescription Varchar (40) OUTPUT, @ giiUnitPrice Numérico (12,2) OUTPUT, @ giiAvailableToSell Integer OUTPUT, @ giiComments varchar (200) OUTPUT ) AS SELECT @ giiDescription = Descrição, giiUnitPrice = @ UnitPrice, @ giiAvailableToSell = AvailableToSell, @ giiComments = Comentários de InventoryItem WHERE
Itemnumber = @ RETORNO giiItemNumber ir - Este procedimento também será chamado pelo sp_DiscountItem sp_GetAmountDue CREATE PROCEDURE (@ CouponCode Varchar (16), @ AmountDue Numérico (12,2) OUTPUT) AS DECLARE @ Bit Redeemed, @ PercentDiscount Numérico (12,2 ) SELECT @ Redeemed = Redeemed, @ PercentDiscount = PercentDiscount DE ONDE Cupom CouponCode = @ CouponCode IF (@ @ ROWCOUNT> 1) BEGIN RETURN - Cupom não existe, nenhuma mudança de preço END IF (@ Redeemed = 1) BEGIN RETURN - Cupom já resgatadas, nenhuma mudança de preço END ELSE BEGIN SELECT @ @ AmountDue = AmountDue * (1 - @ PercentDiscount / 100) END RETURN go - Este é o procedimento que a mãe é chamado CREATE PROCEDURE sp_DiscountItem (@ diCouponCode Varchar (16) , @ diItemNumber VARCHAR (15), @ diDescription Varchar (40) OUTPUT, @ diUnitPrice Numérico (12,2) OUTPUT, @ diAvailableToSell Integer OUTPUT, @ diComments varchar (200) OUTPUT) AS sp_GetInventoryItem EXEC (
@ @ giiItemNumber = diItemNumber, giiDescription = @ @ diDescription OUTPUT, @ giiAvailableToSell giiUnitPrice = @ diUnitPrice OUTPUT, @ = @ diAvailableToSell OUTPUT, @ giiComments = @ diComments OUTPUT) sp_GetAmountDue EXEC (@ CouponCode = @ diCouponCode, AmountDue = @ @ output diUnitPrice) RETURN GO
  

A primeira vez que nós sempre codificado tal coisa, a cabeça quase Split Wide Open da confusão! Parâmetro que é a entrada que saída, e como isto uma passagem de volta para que um e assim por diante? Bem, nós finalmente descobri um maneira de explicar um procedimento usando parâmetros de saída que chamar outro de uma maneira que faz sentido. Você encontra um arquivo chamado Adobe Acrobat Tracing.pdf parâmetro de saída, que contém a listagem anterior repetido uma vez para cada etapa do processo de passagem de parâmetro, juntamente com um diagrama para cada etapa e uma explicação em Inglês simples do que está acontecendo em cada etapa. Nós seguimos um destes parâmetros OUTPUT-UnitPrice-o no seu percurso completo através de todos os procedimentos armazenados que usá-lo e mostrar como os valores são adquiridos e passados entre parâmetros. Altamente Nós sugerimos que você tome alguns momentos para abrir esse documento e seguir cada etapa do processo. Para realmente aproveitar procedimentos armazenados em seus aplicativos do ColdFusion, você precisa entender completamente este assunto complicado. Temos repetido o Inglês simples descrição de cada passo na seguinte lista numerada, mas ter o diagrama na mão, como você lê-los realmente ajuda. O processo todo começa com o sp_DiscountItem procedimento que é chamado de ColdFusion da seguinte forma:

1. sp_DiscountItem é o primeiro procedimento armazenado chamado. O parâmetro de saída @ diUnitPrice começa com um valor NULL; neste momento, @ diUnitPrice é apenas um balde vazio "para receber um valor de volta em sp_DiscountItem depois que termina a execução e retornar o valor para o aplicativo cliente. SAÍDA sp_DiscountItem diz: "Se você faz alguma coisa para o valor de @ diUnitPrice durante a sua execução, a sua saída novo valor de volta @ diUnitPrice para que o novo valor pode ser usado por qualquer aplicação ou procedimento chamado de você." Se @ diUnitPrice não tem o qualificador de saída, ele permanecerá NULL sp_DiscountItem após terminado a execução.

2. @ diUnitPrice é o valor da alimentação para o parâmetro de saída @ giiItemUnitPrice da chamada para sp_GetInventoryItem. Neste momento, ainda é apenas um valor NULL.

3. @ giiUnitPrice inicializa com o valor NULL fornecido pelo @ diUnitPrice e está agora pronto para chamar sp_GetInventoryItem.

4. sp_GetInventoryItem é chamado agora com @ giiUnitPrice como um parâmetro OUTPUT. Ele ainda contém um valor NULL. É só trabalho neste momento é fornecer um balde vazio em que sp_GetInventoryItem pode colocar um valor.

5. Após sp_GetInventoryItem executa, ele seleciona o valor da coluna de InventoryItem.UnitPrice no parâmetro de saída @ giiUnitPrice.

6. @ giiUnitPrice agora contém o preço unitário obtidos a partir do item de inventário, em vez de um valor NULL.

7. Como @ giiUnitPrice é um parâmetro de saída na sp_GetInventoryItem, seu novo valor é de saída traseira em @ sp_DiscountItem dentro giiUnitPrice, que apenas chamou sp_GetInventoryItem.

8. Esse novo valor de @ giiUnitPrice está ainda a saída de volta para o parâmetro @ diUnitPrice que originalmente alimentado o valor NULL para @ giiUnitPrice, porque @ diUnitPrice tem o qualificador OUTPUT na chamada para sp_GetInventoryItem. Agora @ diUnitPrice contém o mesmo valor retornado de sp_GetInventoryItem.

9. Você tem agora o valor do preço unitário descontada a partir do registro de item de estoque armazenado em @ diUnitPrice, e você pode alimentar este valor para sp_GetAmountDue para uma redução de preço possível.

10. @ AmountDue é inicializado com o valor armazenado em @ diUnitPrice e está agora pronto para chamar sp_GetAmountDue.

11. sp_GetAmountDue é chamado agora com @ AmountDue como um parâmetro OUTPUT. Actualmente, contém o valor do preço unitário devolvido a partir do registro de item de estoque.

12. sp_GetAmountDue pode ou não alterar o valor armazenado em @ AmountDue, mas se isso acontecer, o valor modificado é restaurada em @ AmountDue.

13. Como @ AmountDue é um parâmetro de saída na sp_GetAmountDue, seu novo valor é de saída traseira em @ sp_DiscountItem dentro AmountDue, que apenas chamou sp_GetAmountDue.

14. Esse novo valor de @ AmountDue está ainda a saída de volta para o parâmetro @ diUnitPrice que originalmente alimentados inalterado o valor do preço unitário para @ AmountDue, porque @ diUnitPrice tem o qualificador OUTPUT na chamada para sp_GetAmountDue. Now @ diUnitPrice contém a (possivelmente unidade) modificado valor do preço de regressar de sp_GetAmountDue.

15. Como @ diUnitPrice é um parâmetro de saída na sp_DiscountItem, @ diUnitPrice pode mostrar o seu final, possivelmente modificadas valor para o aplicativo ColdFusion que a chamou, em primeiro lugar.

um artigo submetido por Michael Patterson


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Reutilizando código de procedimento armazenado" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 238 users browsing the articles directory   


  

|