求已SQL语句报错的问题,报啥并非所有的变量都已绑定,代码在补充中:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求已SQL语句报错的问题,报啥并非所有的变量都已绑定,代码在补充中:相关的知识,希望对你有一定的参考价值。
DECLARE
l_id NUMBER ;
l_sql VARCHAR2(200) ;
BEGIN
l_sql := 'BEGIN SELECT count(carinfoid) INTO :1 FROM test ; END;';
EXECUTE IMMEDIATE l_sql
INTO l_id;
DBMS_OUTPUT.PUT_LINE(l_id);
exception
when others then
dbms_output.put_line('error:' || sqlcode || sqlerrm);
END;
'BEGIN SELECT count(carinfoid) INTO :1 FROM test ; END
这句话是作为一个语句来单独执行的,是脱离你这个过程,自己去执行的,把他单拿出来执行就会报这个错误。
如果你不动态执行它,应该就没问题了。而且INTO :1是什么? 参考技术A 您好,建议把sql语句在数据库中执行下,看能否正确执行。
我想大概是表里面所有的字段,你没有给全部赋值。
因为你insert into t_login 后面没有具体字段,那么就是全表的所有字段。
values后面给了三个字段。
参考技术B 为什么要用动态SQL ?
直接
select count(carinfoid) into l_id from test 不就好了。 参考技术C SELECT count(carinfoid) INTO l_id FROM test ;
在PLSQLdeveloper上面执行下列代码时报错 ORA-01008:并非所有变量都已绑定,新手求解,
BEGIN
SELECT base_cost,base_duration,unit_cost,cost_type INTO v_cost FROM cost c JOIN service s ON s.cost_id = c.id AND s.id
= :new.service_id;
IF v_cost.cost_type=2 THEN
SELECT count(*) into v_count FROM month_duration WHERE service_id = :new.service_id AND month_id = TO_CHAR
(:new.logout_time,'yyyymm');
IF v_count>0 THEN
SELECT sofar_duration INTO v_sofar_duration FROM month_duration WHERE service_id = :new.service_id AND month_id =
TO_CHAR(:new.logout_time,'yyyymm');
v_temp_duration:=v_sofar_duration;
v_sofar_duration := v_sofar_duration + :new.duration;
v_duration := v_sofar_duration - v_cost.base_duration*60*60;
IF v_duration > 0 AND v_cost.base_duration*60*60> v_temp_duration THEN
:new.cost := v_cost.unit_cost * v_duration/3600;
ELSIF v_duration > 0 AND v_cost.base_duration*60*60<= v_temp_duration THEN
:new.cost :=v_cost.unit_cost*:new.duration/3600;
END IF;
UPDATE month_duration SET sofar_duration=v_sofar_duration WHERE service_id = :new.service_id AND month_id =
TO_CHAR(:new.logout_time,'yyyymm') ;
ELSE
v_sofar_duration := :new.duration;
INSERT INTO month_duration(service_id,month_id,sofar_duration)
VALUES (:new.service_id,TO_CHAR(:new.logout_time,'yyyymm'),v_sofar_duration);
END IF;
ELSIF v_cost.cost_type=3 THEN
:new.cost :=v_cost.unit_cost*(:new.duration/3600);
END IF;
END;
以上是关于求已SQL语句报错的问题,报啥并非所有的变量都已绑定,代码在补充中:的主要内容,如果未能解决你的问题,请参考以下文章
在PLSQLdeveloper上面执行下列代码时报错 ORA-01008:并非所有变量都已绑定,新手求解,
mybatis批量更新不同参数多条语句带分号update报错的解决方案