[firebase-br] erro no execute statement!!!!
NIlton
nilton em idesa.com.br
Ter Jun 20 10:48:42 -03 2006
Por favor me ajudem!!!!!!
Estou montando um sp para inserir registros em uma tabela, tenho que passar
parâmetros do delphi para a sp montar um select, quando executo a sp retorna
o seguinte erro:
Unsuccessful execution caused by an unavailable resource.
Variable type (position 3) in EXECUTE STATEMENT 'select
turma,nome,numero,nota1,faltas1,nota2,falta' INTO does not match return.
Ou seja a string executada pelo for execute statement é truncada.
A seguir mando o código da minha sp.
CREATE PROCEDURE SP_PLANILHAS (
cod_turma integer,
exercicio integer,
datahora varchar(19),
titulo varchar(95),
opcao1 varchar(15),
opcao2 varchar(15),
opcao3 varchar(15),
opcao4 varchar(15))
as
declare variable sql2 varchar(1024);
declare variable sql1 varchar(1024);
declare variable sql varchar(1024);
declare variable materia integer;
declare variable old_numero integer;
declare variable tmp_nome varchar(45);
declare variable tmp_turma varchar(40);
declare variable tmp_num_cham integer;
declare variable tmp_opcao1 varchar(10);
declare variable tmp_opcao2 varchar(10);
declare variable tmp_opcao3 varchar(10);
declare variable tmp_opcao4 varchar(10);
declare variable tmp_conteudo varchar(20);
declare variable tmp_discip varchar(7);
declare variable tmp_lsql varchar(500);
begin
old_numero=0;
sql1='';
sql2='';
sql='';
tmp_lsql='select turma,nome,numero,'|| :opcao1 ||','|| :opcao2 || ',' ||
:opcao3 || ','
|| :opcao4 ||',nome_res from vavaliaetapas where cod_turma = '
||:COD_TURMA ||' and ano_letivo = '|| :exercicio ||
' order by numero';
for execute statement :tmp_lsql
into :tmp_turma, :tmp_nome, :tmp_num_cham, :tmp_opcao1, :tmp_opcao2,
:tmp_opcao3,
:tmp_opcao4, :tmp_discip
do
begin
if (old_numero <> :tmp_num_cham) then
begin
materia = 1;
if (old_numero <> 0) then
begin
sql1 = 'insert into tmp_lst_planilhas
(turma,exercicio,datahora,titulo,nome,numero'||sql1;
sql2 = 'values (''' || :tmp_turma || ''',' || :exercicio ||
',''' || :datahora || ''','''
||:titulo || ''',''' || :tmp_nome || ''',' ||
:old_numero||sql2;
sql = sql1 || ') ' || sql2 || ');';
execute statement :sql;
sql1='';
sql2='';
end
else
begin
tmp_conteudo=:tmp_opcao1||'/'||:tmp_opcao2||'/'||:tmp_opcao3||'/'||:tmp_opca
o4;
sql1 = sql1 || ',discip' || cast(materia as char(1)) ||
',conteudo' ||
cast(materia as char(1));
sql2 = sql2 || ',''' || :tmp_discip || ''',''' || :tmp_conteudo
|| '''';
materia = materia + 1;
old_numero = :tmp_num_cham;
end
end
else
begin
tmp_conteudo=:tmp_opcao1||'/'||:tmp_opcao2||'/'||:tmp_opcao3||'/'||:tmp_opca
o4;
sql1 = sql1 || ',discip' || cast(materia as char(1)) || ', conteudo'
||
cast(materia as char(1));
sql2 = sql2 || ',''' || :tmp_discip || ''',''' || :tmp_conteudo ||
'''';
materia = materia + 1;
end
suspend;
end
end
se tiver alguém par me dar uma luz eu agradeço imensamente.
Mais detalhes sobre a lista de discussão lista