vc tem que ter uma variavel para armazenar a contagem:
testa aé e retorna o erro que aparecer.
SET TERM ^ ;
CREATE PROCEDURE SP_ALTERA_ESTOQUE(
CODLOJA INTEGER,
CODPRODUTO INTEGER,
QUANTIDADE INTEGER)
AS
DECLARE VARIABLE CONTA INTEGER;
BEGIN
Select Count(*)
From PRODUTOSESTOQUELOJA S
WHERE((PRODUTOSESTOQUELO JAS.CODLOJA = :CODLOJA AND
(PRODUTOSESTOQUELOJAS.CODPRODUTO = :CODPRODUTO)
into :conta;
IF (:conta > 0) THEN
BEGIN
UPDATE PRODUTOSESTOQUELOJA S SET PRODUTOSESTOQUELOJA S.ESTOQUE =
PRODUTOSESTOQUELOJA S.ESTOQUE + :QUANTIDADE
END
ELSE
BEGIN
INSERT INTO PRODUTOSESTOQUELOJA S (ESTOQUE) VALUES (QUANTIDADE)
END
END;
SET TERM ; ^
----- Mensagem original ----
De: Edson Cabral <[EMAIL PROTECTED]>
Para: [email protected]
Enviadas: Quarta-feira, 5 de Março de 2008 17:03:47
Assunto: Res: [delphi-br] OFF-TOPIC / SQL Firebird 2.0 - Stored Procedures
Quanto ao uso do componente para executar a Stored Procedure
eu sei.
A questão é que a Stored Procedure abaixo não é criada, pois dá um erro
(possivelmente de sintaxe).
Eu quero saber se alguém descobre que erro é esse, ou se de repente eu estou
fazendo algo errado no corpo da stored procedure para causar o erro.
O erro do IBExpert informa a linha em que está o IF e não compila a stored
procedure no banco. Entendeu? A SP nem sequer chega a ser criada.
Edson
----- Mensagem original ----
De: Ricardo César Cardoso <ricardo_engsoft@ yahoo.com. br>
Para: [EMAIL PROTECTED] os.com.br
Enviadas: Terça-feira, 4 de Março de 2008 12:14:43
Assunto: Re: [delphi-br] OFF-TOPIC / SQL Firebird 2.0 - Stored Procedures
Bem... não sei se entendi sua pergunta, mas se vc quer fazer isso no Delphi,
pode fazer usando o TSQLConnection (DBExpress) passando esta stored procedure.
Cada parâmetro é acessado por um "array" Params e o índice de cada parâmetro. O
primeiro parâmetro tem o índice 0 no "array" de parâmetros e assim por diante.
Para criar a procedure, vc usa o método "Execute".
Acho que é isso. Se não for, detalhe melhor o problema.
Atte,
Ricardo.
Edson Cabral <[EMAIL PROTECTED] com.br> escreveu: Perdoem o off-topic, é que
estou com certa urgência.
Quem trabalha com Stored Procedures poderá tirar essa dúvida.
------------ --------
Olá pessoal.
Estou com uma dúvida em relação a criação de Stored Procedures no Firebird 2.0.
Sempre que precisei usar SPs, as criei a partir do IBExpert.
Só que agora preciso de uma stored procedure que tenho que criar na unha e
estou meio perdido...
Trata-se de uma stored procedure para atualizar o Estoque (campo ESTOQUE) da
tabela PRODUTOSESTOQUELOJA S.
Preciso passar três parâmetros: CodLoja e CodProduto, e mais a Quantidade que
desejo incrementar o estoque.
A SP deve verificar se o produto já existe cadastrado a partir dos parâmetros
de entrada CodProduto e CodLoja (se achar algum registro com os campos CodLoja
e CodProduto que confiram com os parâmetros).
Caso exista, deve-se dar um UPDATE na tabela para atualizar o estoque somando-o
a variável QUANTIDADE (mais um parâmetro de entrada).
Caso não exista ainda cadastrado, deve-se dar um INSERT na tabela cadastrando o
produto com a quantidade em estoque que passei como parâmetro QUANTIDADE.
O código que tenho (e que não funciona, pois dá erro na criação da SP) é esse
abaixo:
Código:
SET TERM ^ ;
CREATE PROCEDURE SP_ALTERA_ESTOQUE(
CODLOJA INTEGER,
CODPRODUTO INTEGER,
QUANTIDADE INTEGER)
AS
BEGIN
IF (Select Count(*) From PRODUTOSESTOQUELOJA S WHERE ((PRODUTOSESTOQUELO
JAS.CODLOJA = :CODLOJA) AND (PRODUTOSESTOQUELOJ AS.CODPRODUTO = :CODPRODUTO) >
0) THEN
BEGIN
BEGIN TRANSACTION
UPDATE PRODUTOSESTOQUELOJA S SET PRODUTOSESTOQUELOJA S.ESTOQUE =
PRODUTOSESTOQUELOJA S.ESTOQUE + :QUANTIDADE
COMMIT
END
ELSE
BEGIN
BEGIN TRANSACTION
INSERT INTO PRODUTOSESTOQUELOJA S (ESTOQUE) VALUES (QUANTIDADE)
COMMIT
END
END;
SET TERM ; ^
Obrigado a todos.
Edson
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail. yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
------------ --------- --------- ---
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
[As partes desta mensagem que não continham texto foram removidas]
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail. yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
<!--
#ygrp-mkp{
border:1px solid #d8d8d8;font-family:Arial;margin:14px 0px;padding:0px 14px;}
#ygrp-mkp hr{
border:1px solid #d8d8d8;}
#ygrp-mkp #hd{
color:#628c2a;font-size:85%;font-weight:bold;line-height:122%;margin:10px 0px;}
#ygrp-mkp #ads{
margin-bottom:10px;}
#ygrp-mkp .ad{
padding:0 0;}
#ygrp-mkp .ad a{
color:#0000ff;text-decoration:none;}
-->
<!--
#ygrp-sponsor #ygrp-lc{
font-family:Arial;}
#ygrp-sponsor #ygrp-lc #hd{
margin:10px 0px;font-weight:bold;font-size:78%;line-height:122%;}
#ygrp-sponsor #ygrp-lc .ad{
margin-bottom:10px;padding:0 0;}
-->
<!--
#ygrp-mlmsg {font-size:13px;font-family:arial, helvetica, clean, sans-serif;}
#ygrp-mlmsg table {font-size:inherit;font:100%;}
#ygrp-mlmsg select, input, textarea {font:99% arial, helvetica, clean,
sans-serif;}
#ygrp-mlmsg pre, code {font:115% monospace;}
#ygrp-mlmsg * {line-height:1.22em;}
#ygrp-text{
font-family:Georgia;
}
#ygrp-text p{
margin:0 0 1em 0;}
#ygrp-tpmsgs{
font-family:Arial;
clear:both;}
#ygrp-vitnav{
padding-top:10px;font-family:Verdana;font-size:77%;margin:0;}
#ygrp-vitnav a{
padding:0 1px;}
#ygrp-actbar{
clear:both;margin:25px 0;white-space:nowrap;color:#666;text-align:right;}
#ygrp-actbar .left{
float:left;white-space:nowrap;}
.bld{font-weight:bold;}
#ygrp-grft{
font-family:Verdana;font-size:77%;padding:15px 0;}
#ygrp-ft{
font-family:verdana;font-size:77%;border-top:1px solid #666;
padding:5px 0;
}
#ygrp-mlmsg #logo{
padding-bottom:10px;}
#ygrp-vital{
background-color:#e0ecee;margin-bottom:20px;padding:2px 0 8px 8px;}
#ygrp-vital #vithd{
font-size:77%;font-family:Verdana;font-weight:bold;color:#333;text-transform:uppercase;}
#ygrp-vital ul{
padding:0;margin:2px 0;}
#ygrp-vital ul li{
list-style-type:none;clear:both;border:1px solid #e0ecee;
}
#ygrp-vital ul li .ct{
font-weight:bold;color:#ff7900;float:right;width:2em;text-align:right;padding-right:.5em;}
#ygrp-vital ul li .cat{
font-weight:bold;}
#ygrp-vital a{
text-decoration:none;}
#ygrp-vital a:hover{
text-decoration:underline;}
#ygrp-sponsor #hd{
color:#999;font-size:77%;}
#ygrp-sponsor #ov{
padding:6px 13px;background-color:#e0ecee;margin-bottom:20px;}
#ygrp-sponsor #ov ul{
padding:0 0 0 8px;margin:0;}
#ygrp-sponsor #ov li{
list-style-type:square;padding:6px 0;font-size:77%;}
#ygrp-sponsor #ov li a{
text-decoration:none;font-size:130%;}
#ygrp-sponsor #nc{
background-color:#eee;margin-bottom:20px;padding:0 8px;}
#ygrp-sponsor .ad{
padding:8px 0;}
#ygrp-sponsor .ad #hd1{
font-family:Arial;font-weight:bold;color:#628c2a;font-size:100%;line-height:122%;}
#ygrp-sponsor .ad a{
text-decoration:none;}
#ygrp-sponsor .ad a:hover{
text-decoration:underline;}
#ygrp-sponsor .ad p{
margin:0;}
o{font-size:0;}
.MsoNormal{
margin:0 0 0 0;}
#ygrp-text tt{
font-size:120%;}
blockquote{margin:0 0 0 4px;}
.replbq{margin:4;}
-->
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
armazenamento!
http://br.mail.yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]