Nesta
página irei mostrar alguns exemplos de como utilizar Stored Procedure do
SQL Server no Delphi. Stored Procedure são blocos de comandos SQL
que ficam compilados no Banco de Dados. Portanto quando alguma Stored
Procedure é requisitada pela aplicação, pelo fato dela já estar
compilada, ela tem uma resposta mais rápida do que se o mesmo
comando fosse executado na máquina cliente. Outra vantagem do uso de
Stored Procedure é que a máquina servidora tem um performance melhor que
a maioria das máquinas clientes, portanto comandos que afetam grande
quantidades de linhas são mais eficientes quando executados no Servidor.
- Stored
Procedure de Seleção
- Stored
Procedure com parâmetros
- Stored
Procedure com parâmetros default
- Stored
Procedure com parâmetro OUTPUT
Stored Procedure de
Seleção
Esta é uma sp de seleção, ela retorna
o nome do autor, o sobrenome do autor, o título do livro e o nome da
editora, para usá-la no Delphi, você deverá colocar em um Form ou
DataModule o componente StoredProcedure que está na aba Data Access da
Paleta de componentes do Delphi. Escolha o alias do banco de dados pubs do
SQLServer, depois de criar a Stored Procedure no Banco de Dados, escolha o
nome da Stored Procedure na propriedade StoredProcName. Feito isto você
poderá abri-lá e fechá-la usando o comando StoredPoc1.Open e
StoredProc1.Close respectivamente se for uma sp de Seleção ou
StoredProc1.ExecProc se for uma Stored Procedure de inclusão, alteração
ou exclusão. Você também poderá utilizar em conjunto com Stored
Procedures de seleção o componente UpdateSQL. Breve colocarei nesta Seção
uma demonstração de como utilizar este componente no Delphi. Então
vamos ao exemplo da Strored Procedure de Seleção:
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a, titles t, publishers p, titleauthor ta
WHERE a.au_id = ta.au_id
AND t.title_id = ta.title_id
AND t.pub_id = p.pub_id
Stored Procedure
com parâmetros
Esta Stored Procedure retorna o nome do
autor, seus livros, e a editora que publicou o livro usando um "join"
entre quatro tabelas. Esta sp recebe dois parâmetros, o nome e o sobre
nome do autor, portanto só irá retornar os livros do autor recebido
pelos parâmetros.
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors, titles, publishers, titleauthor
WHERE au_fname = @firstname
AND au_lname = @lastname
AND authors.au_id = titleauthor.au_id
AND titles.title_id = titleauthor.title_id
AND titles.pub_id = publishers.pub_id
Para executar esta sp no Delphi você deve
fazer o seguinte:
procedure
TForm1.btnExecProc(Sender: TObject);
begin
with
storedproc1 do
begin
if
Active then
Close;
ParamByName('@lastname').Text := Edit1.Text;
ParamByName('@firstname').Text := Edit2.Text;
Open;
end;
end;
Stored Procedure
com parâmetros Default
Esta Stored Procedure é parecida com a
do exemplo acima, só que agora os dois parâmetros têm valores default,
isto significa que se você não passar valores para um dos parâmetros, o
servidor irá usar os valores default, no exemplo os autores que tenham o
sobrenome começando com "D" e o primeiro nome começando com
"A".
CREATE PROCEDURE sp_au_info2
@lastname varchar(30) = 'D%',
@firstname varchar(18) = 'A%'
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a, titles t, publishers p, titleauthor ta
WHERE au_fname LIKE @firstname
AND au_lname LIKE @lastname
AND a.au_id = ta.au_id
AND t.title_id = ta.title_id
AND t.pub_id = p.pub_id
Para executá-la no Delphi você pode fazer
como no exemplo anterior.
Stored Procedure
com parâmetro OUTPUT
Parâmetros OUTPUT permitem acessar um
valor "setado" durante a execução da Stored Procedure. A
Strored Procedure titles_count_sum tem um parâmetro INPUT opcional(porque
se você não passar nenhum parâmetro, o servidor usará o valor Default
(%) e retornará todos os títulos) e dois parâmetros OUTPUT. Ela retorna
o nome do título do livro recebido pelo parâmetro @title e também
retorna no primeiro parâmetro (@count) o número de livros encontrado. Já
o segundo parâmetro (@sum) retorna o valor da soma do preço dos livros
encontrados.
CREATE PROCEDURE titles_count_sum
@title varchar(40) = '%',
@count money OUTPUT
@sum money OUTPUT
AS
SELECT @count = COUNT(title_id)
FROM titles
WHERE title LIKE @title
SELECT @sum = SUM(price)
FROM titles
WHERE title LIKE @title
Para executar esta sp no Delphi você deve
fazer como segue:
procedure
TForm1.Button1Click(Sender: TObject);
begin
with
StoredProc1 do
begin
if
Active then
Close;
ParamByName('@title').Text := Edit1.Text;
ExecProc;
Edit2.Text
:= ParamByName('@sum').Text;
Edit2.Text
:= ParamByName('@count').Text;
end;
end;