Oracle - 在过程中选择并删除

Jam*_*s L 3 oracle plsql

我需要从Oracle过程返回一个行集,然后在同一过程中删除它们.有没有临时表这样做的简洁方法?像内存中的游标那样的东西可能吗?

基本上我是从队列中弹出记录,我想避免两次往返,因为这是一个非常频繁的过程.

Dav*_*sta 8

实际上,这些天你可以在没有SELECT的情况下完成.您可以简单地删除您感兴趣的记录,并使用RETURNING子句将这些记录删除到局部变量中.

DELETE FROM my_table
  WHERE <whatever conditions>
  RETURNING column1, column2, ...
  INTO array1, array2, ...
Run Code Online (Sandbox Code Playgroud)

这种方法稍微烦人的部分是你需要将每个列提取到一个单独的变量中.您不能在此上下文中使用记录类型.因此,如果你有很多列,它会变得很麻烦.