Sql 在没有光标的select查询中使用批量收集结果

Sql 在没有光标的select查询中使用批量收集结果,sql,oracle,plsql,bulk-collect,Sql,Oracle,Plsql,Bulk Collect,我是PL/SQL新手,我想知道是否可以使用这样的批量收集结果: Declare type result_bulk_type is Table of table1.ID%type; result_bulk result_bulk_type; BEGIN SELECT id BULK COLLECT INTO result_bulk FROM table1; UPDATE table2 SET status=1 WHERE id IN result_bulk; END; 我在编译时出错: PL/S

我是PL/SQL新手,我想知道是否可以使用这样的批量收集结果:

Declare
type result_bulk_type is Table of table1.ID%type;
result_bulk result_bulk_type;
BEGIN
SELECT id BULK COLLECT INTO result_bulk FROM table1;
UPDATE table2 SET status=1 WHERE id IN result_bulk;
END;
我在编译时出错:

PL/SQL:SQL语句被忽略

PL/SQL:ORA-00932:不一致的数据类型:预期数量已获得系统PLSQL\U 22223\U 1


谢谢你的帮助

不,不能这样做。改用FORALL语句。
请阅读以下内容:

例如:

Declare
  type result_bulk_type is Table of table1.ID%type;
  result_bulk result_bulk_type;
BEGIN
  SELECT id BULK COLLECT INTO result_bulk FROM table1;
  FORALL i IN INDICES OF result_bulk
    UPDATE table2 SET status=1 WHERE id = result_bulk( i );
END;
/

演示:

不,不能这样做。改用FORALL语句。
请阅读以下内容:

例如:

Declare
  type result_bulk_type is Table of table1.ID%type;
  result_bulk result_bulk_type;
BEGIN
  SELECT id BULK COLLECT INTO result_bulk FROM table1;
  FORALL i IN INDICES OF result_bulk
    UPDATE table2 SET status=1 WHERE id = result_bulk( i );
END;
/

演示:

不,不能这样做。改用FORALL语句。
请阅读以下内容:

例如:

Declare
  type result_bulk_type is Table of table1.ID%type;
  result_bulk result_bulk_type;
BEGIN
  SELECT id BULK COLLECT INTO result_bulk FROM table1;
  FORALL i IN INDICES OF result_bulk
    UPDATE table2 SET status=1 WHERE id = result_bulk( i );
END;
/

演示:

不,不能这样做。改用FORALL语句。
请阅读以下内容:

例如:

Declare
  type result_bulk_type is Table of table1.ID%type;
  result_bulk result_bulk_type;
BEGIN
  SELECT id BULK COLLECT INTO result_bulk FROM table1;
  FORALL i IN INDICES OF result_bulk
    UPDATE table2 SET status=1 WHERE id = result_bulk( i );
END;
/

演示:

使用“结果批量的WHERE id成员”

使用“结果批量的WHERE id成员”

使用“结果批量的WHERE id成员”

使用“结果批量的WHERE id成员”

好的,谢谢!但是,还有别的办法吗?(不使用批量收集和FORALL)将结果存储在数组中?好的,谢谢!但是,还有别的办法吗?(不使用批量收集和FORALL)将结果存储在数组中?好的,谢谢!但是,还有别的办法吗?(不使用批量收集和FORALL)将结果存储在数组中?好的,谢谢!但是,还有别的办法吗?(不使用大容量收集和FORALL)将结果存储在数组中?好的,我会这样尝试,因为实际上我有6个更新要做,使用FORALL方法我必须创建7个FORALL调用,这似乎是耗时的,我会这样尝试,因为实际上我有6个更新要做,使用FORALL方法我必须创建7个FORALL调用,这似乎是耗时的,我会这样尝试,因为实际上我有6个更新要做,使用FORALL方法我必须创建7个FORALL调用,这似乎是耗时的,我会这样尝试,因为实际上我有6个更新要做,使用FORALL方法,我必须创建7个FORALL调用,这似乎很耗时