Criar stored procedure via delphi com query
Ola, estou criando uma stored procedure query e o delphi ao executar o
qry.execsql me retorna o seguinte erro:
"General SQL Error.
Token Unknown - line 23, colunm 12
?."
segue abaixo o codigo sql da query
create or alter procedure ATUALIZA_ORDERNAHORAABAST
as
declare variable VNUMITEMVENDA integer;
declare variable VHORAABASTSTRING varchar(24);
declare variable VCODVENDA integer;
declare variable VCODBICO integer;
declare variable VHORAABAST date;
declare variable VENCERRANTE integer;
declare variable VAUX date;
declare variable VAUXINT integer;
declare variable VAUXCODVENDA integer;
declare variable VAUXNUMITEMVENDA integer;
begin
for select extract (day from recupVendas.datavenda ) || "."
|| extract (month from recupVendas.datavenda ) || "."
|| extract (year from recupVendas.datavenda ) || " "
|| extract (hour from recupVendas.horavenda ) || ":"
|| extract (minute from recupVendas.horavenda ),
recupvendas.codvenda, recupItensVenda.numitemvenda
from recupVendas
inner join recupItensVenda on (recupItensVenda.codvenda = recupVendas.codvenda)
order by recupItensVenda.encerranteinicial
into :VHORAABASTSTRING, :vCodVenda, :vNumItemVenda do
begin
update recupItensvenda set recupItensVenda.horaabast = :VHORAABASTSTRING
where recupItensVenda.codvenda = :vcodvenda and
recupItensVenda.numitemvenda = :vNumItemVenda;
end
for select bicos.codbico from bicos into :vcodbico do
begin
vAuxInt = 0;
for select recupitensvenda.codvenda, recupitensvenda.numitemvenda, recupitensvenda.horaabast, recupitensvenda.encerranteinicial
from recupitensvenda
where recupitensvenda.codbico = :vcodbico and recupitensvenda.encerranteinicial <> 0 and recupitensvenda.encerrante <> 0
order by recupitensvenda.encerranteinicial
into :vcodvenda, :vNumItemVenda, :vhoraabast, :vencerrante do
begin
if (:vauxint > 0) then
begin
if (:vAux > :vhoraabast) then
begin
update recupItensvenda set recupItensVenda.horaabast = :vhoraabast
where recupItensVenda.codvenda = :vAuxCodVenda and recupItensVenda.numitemvenda = :vnumitemvenda;
end
end
vAux = :vhoraabast;
vAuxCodVenda = :vCodvenda;
vAuxNumItemVenda = :vNumItemVenda;
vAuxInt = 1;
end
end
end
Alguem pode me ajudar a descobrir porque a query nao executa e mostra que existe uma interrogacao no codigo?
Obrigado
qry.execsql me retorna o seguinte erro:
"General SQL Error.
Token Unknown - line 23, colunm 12
?."
segue abaixo o codigo sql da query
create or alter procedure ATUALIZA_ORDERNAHORAABAST
as
declare variable VNUMITEMVENDA integer;
declare variable VHORAABASTSTRING varchar(24);
declare variable VCODVENDA integer;
declare variable VCODBICO integer;
declare variable VHORAABAST date;
declare variable VENCERRANTE integer;
declare variable VAUX date;
declare variable VAUXINT integer;
declare variable VAUXCODVENDA integer;
declare variable VAUXNUMITEMVENDA integer;
begin
for select extract (day from recupVendas.datavenda ) || "."
|| extract (month from recupVendas.datavenda ) || "."
|| extract (year from recupVendas.datavenda ) || " "
|| extract (hour from recupVendas.horavenda ) || ":"
|| extract (minute from recupVendas.horavenda ),
recupvendas.codvenda, recupItensVenda.numitemvenda
from recupVendas
inner join recupItensVenda on (recupItensVenda.codvenda = recupVendas.codvenda)
order by recupItensVenda.encerranteinicial
into :VHORAABASTSTRING, :vCodVenda, :vNumItemVenda do
begin
update recupItensvenda set recupItensVenda.horaabast = :VHORAABASTSTRING
where recupItensVenda.codvenda = :vcodvenda and
recupItensVenda.numitemvenda = :vNumItemVenda;
end
for select bicos.codbico from bicos into :vcodbico do
begin
vAuxInt = 0;
for select recupitensvenda.codvenda, recupitensvenda.numitemvenda, recupitensvenda.horaabast, recupitensvenda.encerranteinicial
from recupitensvenda
where recupitensvenda.codbico = :vcodbico and recupitensvenda.encerranteinicial <> 0 and recupitensvenda.encerrante <> 0
order by recupitensvenda.encerranteinicial
into :vcodvenda, :vNumItemVenda, :vhoraabast, :vencerrante do
begin
if (:vauxint > 0) then
begin
if (:vAux > :vhoraabast) then
begin
update recupItensvenda set recupItensVenda.horaabast = :vhoraabast
where recupItensVenda.codvenda = :vAuxCodVenda and recupItensVenda.numitemvenda = :vnumitemvenda;
end
end
vAux = :vhoraabast;
vAuxCodVenda = :vCodvenda;
vAuxNumItemVenda = :vNumItemVenda;
vAuxInt = 1;
end
end
end
Alguem pode me ajudar a descobrir porque a query nao executa e mostra que existe uma interrogacao no codigo?
Obrigado
Fabio Cardoso
Curtidas 0
Respostas
Leandro Chiodini
10/01/2014
Bom dia
Esste erro é generico
e quer dizer que tem um erro na sintaxe da tua procedure.
pode ser um :
oi ;
no caso ai falta uma ; no ultimo END
recomendo dar uma geral no teu codigo,
identar ele pra ver certinho os begins e ends.
att,
Chiodini
Esste erro é generico
e quer dizer que tem um erro na sintaxe da tua procedure.
pode ser um :
oi ;
no caso ai falta uma ; no ultimo END
recomendo dar uma geral no teu codigo,
identar ele pra ver certinho os begins e ends.
att,
Chiodini
GOSTEI 0
Fabio Cardoso
10/01/2014
eu fiz essa identação aqui, e testei essa mesma query direto no ibexpert ela cria o procedure e executa perfeitamente mas no delphi continua dando o erro
Sera que tem algum caracter que o delphi identifica diferente do editor do ibexpert?
Sera que tem algum caracter que o delphi identifica diferente do editor do ibexpert?
GOSTEI 0
Leandro Chiodini
10/01/2014
Acho que pra tu executar uma procedure
nao pode ser esse comando no delphi
Coloque um componente TSQLStoredProc mude a propriedade SQLConnection para Conn e SotoredProcName para o nome da sua procedure que é o nome da procedure criada no banco de dados
e chama ao invez do execsql chama o ExecProc ?
att,
Chiodini
nao pode ser esse comando no delphi
Coloque um componente TSQLStoredProc mude a propriedade SQLConnection para Conn e SotoredProcName para o nome da sua procedure que é o nome da procedure criada no banco de dados
e chama ao invez do execsql chama o ExecProc ?
att,
Chiodini
GOSTEI 0
Fabio Cardoso
10/01/2014
eu imaginei isso porem essa procedure ainda nao existe no banco, no caso seria tipo eu criar uma query dessas ai somente com a assinatuda da procedure e executar esse script no storedprocedure?
GOSTEI 0
Leandro Chiodini
10/01/2014
Create or replace
poderia ser usado,
dai ficaria tranquilo.
poderia ser usado,
dai ficaria tranquilo.
GOSTEI 0
Fabio Cardoso
10/01/2014
a stored procedure nao deu tambem nao ele so executa a procedure assinatura que criei na query
GOSTEI 0