我对存储过程中的execeute语句有一个问题,我找不出它,我在一个变量中尝试查询文本,在异常中显示它,以查看它是否正常,复制并执行它和worket,但是在execute语句中我得到了同样的错误“命令的意外结束--第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; 有人知道这个问题会带来什么吗?
发布于 2015-09-15 09:49:36
意外的命令结束通常意味着解析器在仍然期待令牌时到达语句的末尾,或者到达解析器状态,在那里应该完成,但仍然有标记。将值连接到查询中的事实是一个红旗。此外,“列532676549”可能是问题的指示,因为这超过了查询长度限制(在Firebird2.5和更早版本中为64k),并且还表明您的文本大于支持值(32k)。
语句支持参数化查询。:使用它。我建议您将查询重写为参数化查询,并查看该查询是否有效,例如:
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,这带来了另一组潜在的问题。
https://stackoverflow.com/questions/32570039
复制相似问题