SQL%ROWCOUNT产生ORA-00911:无效字符

问题描述 投票:1回答:1

我正在尝试记录DELETE语句中受影响的行数,所以

delete MyTbl where MyCondition = 1;
insert into MyLog(MyTotal) values(SQL%ROWCOUNT);

得到这个:

删除了10行。

插入MyLog(MyTotal)值(SQL%ROWCOUNT)

第2行错误ORA-00911:无效字符

原因:

与PL / SQL无关。 SQL%ROWCOUNT很特别。

即使在PL / SQL块中(无论是存储过程还是匿名过程),也不能在INSERT语句中使用SQL%ROWCOUNT;你必须创建一个变量,为它分配计数,并在INSERT中使用该变量

oracle
1个回答
4
投票

你可能正在尝试做这样的事情。请注意,即使在PL / SQL块中(无论是存储过程还是匿名过程),您都不能在SQL%ROWCOUNT语句中使用INSERT;你必须创建一个变量,为它分配计数,并在INSERT中使用该变量。

create table mytbl (id number, mycondition number);

insert into mytbl
  select 101, 1 from dual union all
  select 102, 2 from dual union all
  select 105, 1 from dual union all
  select 110, 9 from dual
;

commit;

create table mylog(mytotal number);

匿名块(程序我们没有命名,所以我们只能使用它一次,到位;否则给它一个名字,它就变成了“存储过程”):

declare
  cnt number;
begin
  delete mytbl where mycondition = 1;
  cnt := sql%rowcount;
  insert into mylog(mytotal) values (cnt);
end;
/

执行它(选择并按F5?我不使用Toad,但这是它在SQL Developer中的工作方式)。

然后检查结果:

select * from mytbl;

 ID MYCONDITION
--- -----------
102           2
110           9

select * from mylog;

MYTOTAL
-------
      2

完成后别忘了COMMIT!并且,我希望这对你实际做的事情有一个显着的过度简化;日志表中的一行,只显示已删除的行数,没有其他信息(如时间戳),是没用的。

© www.soinside.com 2019 - 2024. All rights reserved.