Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE SQL%ROWCOUNT不';不要在游标提取中工作_Oracle_Plsql - Fatal编程技术网

ORACLE SQL%ROWCOUNT不';不要在游标提取中工作

ORACLE SQL%ROWCOUNT不';不要在游标提取中工作,oracle,plsql,Oracle,Plsql,在下面的代码中,我无法在游标提取中获取插入的行数 ... row_count NUMBER:= 0; BEGIN OPEN object_id_cur(id, c_bool); LOOP FETCH object_id_cur INTO l_object_id; EXIT WHEN object_id_cur%NOTFOUND; INSERT INTO table1(

在下面的代码中,我无法在游标提取中获取插入的行数

 ...
row_count NUMBER:= 0;
BEGIN
OPEN object_id_cur(id, c_bool);
            LOOP 
              FETCH object_id_cur INTO l_object_id;
              EXIT WHEN object_id_cur%NOTFOUND;

              INSERT INTO table1( 
                                  id, 
                                  num
                                  )
                     SELECT t2.r_object_id, 
                            t2.num                            
                       FROM table2
                      WHERE t2.r_object_id = l_object_id.r_object_id;
               row_count:= row_count + SQL%ROWCOUNT;
               -- I also tried dbms_output.put_line(SQL%ROWCOUNT); 
            END LOOP;
          CLOSE object_id_cur;
          COMMIT;
          dbms_output.put_line('insert count= ' || row_count || ' rows inserted...');
END;

我得到的结果是:
count=插入的行…
count为空。如果我将insert移到游标获取之外,那么行计数就可以正常工作。对此有逻辑上的解释吗?谢谢

SQL%ROWCOUNT
返回上次执行的
DML
获取/处理的行数。如果DML在获取1行后由于任何原因失败,
SQL%ROWCOUNT
将只返回1,即迄今为止获取/处理的行数。它不会告诉你总数。我做了一个简单的PLSQL块,使
SQL%ROWCOUNT
工作正常。您的代码中似乎还有其他不起作用的内容

declare
   num   number := 0;
begin
   for i in 1 .. 10
   loop
      insert into a_table (id)
           values (i);

      num := num + sql%rowcount;
   end loop;

   dbms_output.put_line (num);
end;

SQL%ROWCOUNT
返回上次执行的
DML
获取/处理的行数。如果DML在获取1行后由于任何原因失败,
SQL%ROWCOUNT
将只返回1,即迄今为止获取/处理的行数。它不会告诉你总数。我做了一个简单的PLSQL块,使
SQL%ROWCOUNT
工作正常。您的代码中似乎还有其他不起作用的内容

declare
   num   number := 0;
begin
   for i in 1 .. 10
   loop
      insert into a_table (id)
           values (i);

      num := num + sql%rowcount;
   end loop;

   dbms_output.put_line (num);
end;

count
是保留关键字。使用
“count”
或其他标识,如
cnt
。另外,在increment语句的末尾添加缺少的分号

declare
  cnt number := 0;
begin
    . . . 
    cnt := cnt + SQL%ROWCOUNT;
    . . .
演示:


count
是保留关键字。使用
“count”
或其他标识,如
cnt
。另外,在increment语句的末尾添加缺少的分号

declare
  cnt number := 0;
begin
    . . . 
    cnt := cnt + SQL%ROWCOUNT;
    . . .
演示:


代码正在编译。我可以看出它不会编译并抛出问题。缺少一个
at
count:=count+SQL%ROWCOUNT
Hi@XING。是的,它的编译就是我手动编写count变量来说明这个问题。我好像错过了比赛;代码正在编译。我可以看出它不会编译并抛出问题。缺少一个
at
count:=count+SQL%ROWCOUNT
Hi@XING。是的,它的编译就是我手动编写count变量来说明这个问题。我好像错过了比赛;嗨,古尔夫。是的,在真实场景中,我使用了变量row_count,得到了相同的问题。我只是写了count来说明这个问题;抱歉搞混了。他说代码是编译的。我猜他只是举了一个例子,说明
count
不起作用。如果他使用了
count
,他肯定会得到编译错误。是的,在真实场景中,我使用了变量row_count,得到了相同的问题。我只是写了count来说明这个问题;抱歉搞混了。他说代码是编译的。我猜他只是举了一个例子,说明
count
不起作用。如果他使用了
count
,他肯定会得到编译错误。正如邢所说,我似乎必须重新安排代码,因为它编译得很好,但没有返回行数@古尔文德·辛格的方法对我和邢的方法都有效。谢谢你的帮助!但是我想说我们实际上什么也没做。。您的代码已经在运行,没有问题。对于这个问题,演示和所有答案似乎都毫无价值。正如XING所说,我似乎不得不重新安排我的代码,因为它编译得很好,但没有返回行数@古尔文德·辛格的方法对我和邢的方法都有效。谢谢你的帮助!但是我想说我们实际上什么也没做。。您的代码已经在运行,没有问题。对于这个问题,演示和所有答案似乎都毫无价值。