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

Unexpected end of command - line 1, column 532676549 (with execute statement in firebird 2.5)

我在存储过程中的 execeute 语句有问题,我无法弄清楚,我尝试在变量中查询文本,在异常中显示它以查看是否正常,复制并执行它,然后worket,但是在执行语句中我得到了同样的错误 "Unexpected end of command - line 1, column 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; 

有人知道问题出在哪里吗?

命令意外结束通常意味着解析器到达语句末尾,同时它仍在等待令牌,或者达到了应该完成但仍有令牌的解析器状态。您将值连接到查询中的事实是一个危险信号。此外,“列 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,这会带来另一组潜在问题。