求已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;

报的错误是not all variables bound(并非所有的变量都已绑定)对吧?语句错误的来源是
'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;

参考技术A 你倒是说说plsql里是啥错啊,就这么贴一堆代码,谁也没心思看啊,也没个注释说明啥的,也不弄语法高亮设置

以上是关于求已SQL语句报错的问题,报啥并非所有的变量都已绑定,代码在补充中:的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01008: 并非所有变量都已绑定

ORA-01008: 并非所有变量都已绑定

在PLSQLdeveloper上面执行下列代码时报错 ORA-01008:并非所有变量都已绑定,新手求解,

mybatis批量更新不同参数多条语句带分号update报错的解决方案

详解基于MSSQL “order by”语句报错的SQL注入技术

oracle如何执行多条create 语句