我在存储过程中遇到execeute语句的问题,我无法弄明白,我在变量中尝试查询的文本,在异常中显示它是否很好,复制并执行它和worket,但在执行语句中我得到相同的错误“意外的命令结束 - 第1行,第532676549行”
execute statement 'insert into rep_balancediario(id_rep_balancediario,id_plancuenta,id_saldocontable,nivel,codigoreducido,
SALDOANTERIOR,CREDITO,DEBITO,SALDODIA, cuentacontable,imputable,id_moneda,contracuenta,saldocontabledes,ID_SUCURSALAGENCIA)
values(gen_id(id_rep_balancediario,1),'||:v_id_PlanCuenta||','||:V_NROSALDOCONTABLE||','||:v_Nivel||',"'||:v_CodigoReducido||'",'||
:V_SALDOANTERIORMN||','||:V_CREDITOMN||','||:V_DEBITOMN||','||:v_resultadosaldoactual||',"'||cast(:v_CuentaContable as VARCHAR(11))||'","S",'
||:v_nromoneda||',
"'||cast(:v_contracuenta as VARCHAR (11))||'","'||cast(:V_DESSALDOCONTABLE as VARCHAR(255))||' >'||cast(:v_des_suc as varchar(100))||'",'
||:VE_IDSUCURSALAGENCIA||')'
--:V_str_sql
with AUTONOMOUS TRANSACTION;
有人知道这个问题能解决什么问题吗?
答案 0 :(得分:3)
命令结束通常意味着解析器在它仍然期望令牌时到达语句的末尾,或者达到解析器状态,它应该完成但仍然存在令牌。您将值连接到查询中的事实是一个红色标记。此外,“列532676549”可能是问题的指示,因为它超出了查询长度限制(Firebird 2.5及更早版本中的64k),并且还建议您使用大于支持的文字(32k)。
Execute statement supports parametrized queries:使用它。我建议你将查询重写为参数化查询,看看是否有效,作为一个例子:
execute statement ('insert into aTable (column1, column2) values (?, ?)') (aVariable, 'literal');
或
execute statement ('insert into aTable (column1, column2) values (:var1, :var2)') (var1 := aVariable, var2 := 'literal');
我还看到你的查询包含双引号,我希望单引号,这表示你使用弃用的方言1,这带来了另一组潜在的问题。