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: delphi-br@yahoogrupos.com.br
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]

Responder a