Array
(
)

aprender a montar uma stored procedure

Universodosoftware
   - 19 jun 2004

amigos, gostaria q alguém me ajudasse a aprender como montar uma stored procedure, ou mesmo, se alguém tivesse conteúdo desde inicial ao avançado sobre o assunto, ficarei grato.

Ah! já ia esquecendo e como fazer para passar os parâmetros da stored procedure via programação (delphi).

Valeu!!

Thiago
universodosoftware@hotmail.com

Fer_nanda
   - 04 jul 2004

Aqui vc encontra bastante material http://www.sqlmagazine.com.br/apostilas.asp

Mas pra te adiantar alguma coisa está aqui um exemplo. Ela é um pouco grande.. qualquer dúvida é só perguntar.

Citação:

create Procedure stpEmbarqueInvoice

@wsEmbCodigo Numeric --parametro q ela receberá pelo delphi
As

Declare
@QtdTotalEmbarcada float, --variaveis criadas para uso alocal
@VlrTotalInvoice float,
@wsTipoContrato numeric

Select @QtdTotalEmbarcada = (Select Sum(EitQtdEmbarcada) From EmbarqueItem Where EmbCodigo = @wsEmbCodigo)

Select @wsTipoContrato = (Select Top 1 Cit.TcoCodigo From Embarque Emb, EmbarqueItem Eit, ContratoItem Cit Where Cit.CtrCodigo = Emb.CtrCodigo and Eit.EmbCodigo = Emb.EmbCodigo and Eit.IcoCodigo = Cit.IcoCodigo and Emb.EmbCodigo = @wsEmbCodigo)

if @wsTipoContrato = 1 -- COMPRA
begin
Select
Imp.ImpNome ´ImpNome´,
Imp.ImpEndereco ´ImpEndereco´,
Imp.ImpCidade ´ImpCidade´,
Imp.ImpPais ´ImpPais´,
Imp.ImpNome ´TituloRel´,
RTrim(Imp.ImpEndereco) + ´ - ´ + RTrim(Imp.ImpBairro) + ´ - ´ + RTrim(Imp.ImpCidade) + ´ - ´ + RTrim(Imp.ImpUF) ´SubTituloRel´,
Imp.ImpConta ´Acount´,
Imp.ImpNomeBanco ´BankNameCustomer´,
Imp.ImpBtwVatNr ´BtwVatNrBuyer´,
Imp.ImpDadoBancario ´ImpDadoBancario´,

Ntf.ImpNome ´NtfNome´,
Ntf.ImpEndereco ´NtfEndereco´,
Ntf.ImpCidade ´NtfCidade´,
Ntf.ImpPais ´NtfPais´,

Ctr.CtrPortoEmbarque ´PortoEmbarque´,
Ctr.CtrPortoDestino ´PortoDestino´,
Ctr.CtrNumero ´NumeroContrato´,
Ctr.CtrMarcaFardo ´MarcaFardo´,
Fpg.FpgDescricao ´FormaPagamento´,
Nav.NavNome ´Navio´,
Rse.RseDtEmbarque ´DataEmbarque´,
Cem.CemNome ´Embarcador´,
-- @QtdTotalEmbarcada ´QtdTotalEmbarcada´,
Rse.InvCodigo ´NumeroInvoice´,
Emb.EmbPeso ´Peso´,
Emb.EmbQtdFardo ´QtdFardo´,
-- Ind.IndDescricao ´DescricaoInvoice´,
Emb.EmbDescricaoInvoice ´DescricaoInvoice´,
EmbTotalInvoice ´VlrTotalInvoice´,
Emb.EmbNumBl ´Bl´,
Emb.EmbRefComprador ´Buyer´,
Emb.EmbPaisOrigemProduto ´CountryOrigin´,
Emb.EmbPaisEmissaoInvoice ´CountryProvenance´,
Tar.TarNumero ´CustonsTarif´,
Emb.EmbObservacao ´AditionalConditions´,
Emb.EmbDtPrevChegada ´DtPrevChegada´,
Tpa.TpaDescricao ´CondicaoPagamento´
from
Embarque Emb,
Importador Imp,
Importador Ntf,
Contrato Ctr,
Reserva Rse,
Navio Nav,
FormaPagamento Fpg,
CompanhiaEmbarcadora Cem,
InvoiceDado Ind,
TipoPagamento Tpa,
Tarifa Tar,
Exportador Ept
Where
Emb.CtrCodigo = Ctr.CtrCodigo and
Emb.ImpCodigo = Ntf.ImpCodigo and
Ctr.ImpCodigo = Imp.ImpCodigo and
Ctr.FpgCodigo = Fpg.FpgCodigo and
Ctr.IndCodigo = Ind.IndCodigo and
Ctr.TpaCodigo = Tpa.TpaCodigo and
Emb.RseCodigo = Rse.RseCodigo and
Rse.NavCodigo = Nav.NavCodigo and
Rse.CemCodigo = Cem.CemCodigo and
Emb.TarCodigo = Tar.TarCodigo and
Emb.ExpCodigo = Ept.ExpCodigo and
Emb.EmbCodigo = @wsEmbCodigo
end

if @wsTipoContrato = 3 -- VENDA
begin
Select
Imp.ImpNome ´ImpNome´,
Imp.ImpEndereco ´ImpEndereco´,
Imp.ImpCidade ´ImpCidade´,
Imp.ImpPais ´ImpPais´,
Ept.ExpNome ´TituloRel´,
RTrim(Ept.ExpEndereco) + ´ - ´ + RTrim(Ept.ExpBairro) + ´ - ´ + RTrim(Ept.ExpCidade) + ´ - ´ + RTrim(Ept.ExpUF) ´SubTituloRel´,
Imp.ImpConta ´Acount´,
Imp.ImpNomeBanco ´BankNameCustomer´,
Imp.ImpBtwVatNr ´BtwVatNrBuyer´,
Imp.ImpDadoBancario ´ImpDadoBancario´,

Ntf.ImpNome ´NtfNome´,
Ntf.ImpEndereco ´NtfEndereco´,
Ntf.ImpCidade ´NtfCidade´,
Ntf.ImpPais ´NtfPais´,

Ctr.CtrPortoEmbarque ´PortoEmbarque´,
Ctr.CtrPortoDestino ´PortoDestino´,
Ctr.CtrNumero ´NumeroContrato´,
Ctr.CtrMarcaFardo ´MarcaFardo´,
Fpg.FpgDescricao ´FormaPagamento´,
Nav.NavNome ´Navio´,
Rse.RseDtEmbarque ´DataEmbarque´,
Cem.CemNome ´Embarcador´,
@QtdTotalEmbarcada ´QtdTotalEmbarcada´,
Rse.InvCodigo ´NumeroInvoice´,
Emb.EmbPeso ´Peso´,
Emb.EmbQtdFardo ´QtdFardo´,
-- Ind.IndDescricao ´DescricaoInvoice´,
Emb.EmbDescricaoInvoice ´DescricaoInvoice´,
EmbTotalInvoice ´VlrTotalInvoice´,
Emb.EmbNumBl ´Bl´,
Emb.EmbRefComprador ´Buyer´,
Emb.EmbPaisOrigemProduto ´CountryOrigin´,
Emb.EmbPaisEmissaoInvoice ´CountryProvenance´,
Tar.TarNumero ´CustonsTarif´,
Emb.EmbObservacao ´AditionalConditions´,
Emb.EmbDtPrevChegada ´DtPrevChegada´,
Tpa.TpaDescricao ´CondicaoPagamento´

from
Embarque Emb,
Importador Imp,
Importador Ntf,
Contrato Ctr,
Reserva Rse,
Navio Nav,
FormaPagamento Fpg,
CompanhiaEmbarcadora Cem,
InvoiceDado Ind,
TipoPagamento Tpa,
Tarifa Tar,
Exportador Ept
Where
Emb.CtrCodigo = Ctr.CtrCodigo and
Emb.ImpCodigo = Ntf.ImpCodigo and
Ctr.ImpCodigo = Imp.ImpCodigo and
Ctr.FpgCodigo = Fpg.FpgCodigo and
Ctr.IndCodigo = Ind.IndCodigo and
Ctr.TpaCodigo = Tpa.TpaCodigo and
Emb.RseCodigo = Rse.RseCodigo and
Rse.NavCodigo = Nav.NavCodigo and
Rse.CemCodigo = Cem.CemCodigo and
Emb.TarCodigo = Tar.TarCodigo and
Emb.ExpCodigo = Ept.ExpCodigo and
Emb.EmbCodigo = @wsEmbCodigo
end


O Parametro no delphi é simples. Se stiver usando ADOStoredProc (exemplo) vc só seta a conexão e em procedurename coloca o nome da stored procedure, define o parâmetro e para passar é como se fosse passar parametro para uma qry... mais ou menos assim:
#Código

  storedproc1.close;
  storedproc1.parameters.parambyname(´@wsEmbCodigo´).value := edtembcodigo.value;
  storedproc1.open; // ou execproc dependendo da necessidade.

Espero ter ajudado