意外的命令结束 - 第1行,第532676549行(在firebird 2.5中使用execute语句)

时间:2015-09-14 16:58:29

标签: firebird

我在存储过程中遇到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; 

有人知道这个问题能解决什么问题吗?

1 个答案:

答案 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,这带来了另一组潜在的问题。